当前位置: 首页 > 面试题库 >

如何最多使用两个交换对三个变量进行排序?

东方俊材
2023-03-14
问题内容

下面的算法可以排序三个变量xyz类型的K可媲美使用operator<

void sort2(K& x, K& y) {
   if(y < x)
      swap(x, y);
}

void sort3(K& x, K& y, K& z) {
   sort2(x, y);
   sort2(y, z);
   sort2(x, y);
}

在“最坏情况”下,这需要进行三个交换。但是基本数学告诉我们,三个值的排序只能使用两个交换来完成。

示例:将使用三个交换对值(c,b,a)进行排序:(c,b,a)->(b,c,a)->(b,a,c)->(a,b,
C)。但是一次交换就足够了:(c,b,a)->(a,b,c)。

在所有情况下最多用两个交换对三个变量进行排序的最简单算法是什么?


问题答案:

找到最小的,这需要2个比较,然后将其交换到第一个位置。然后比较剩余的2个,并在必要时交换。

if (x < y) {
   if (z < x) swap(x,z);
} else {
  if (y < z) swap(x,y);
  else swap(x,z);
} 
if(z<y) swap(y,z);

这需要进行3次比较,但只有两次交换。



 类似资料:
  • 在两行中编写一段代码,即交换两个变量而不使用第三个变量。在java中有可能吗

  • 问题内容: 我有两个变量: 我的问题是如何交换它们?仅此变量,没有任何对象。 问题答案: 这是交换两个变量的值的单行代码。 给定变量和: 示范如下:

  • 问题内容: 我有一个包含Quote对象的数组列表。我希望能够按名称,更改和更改百分比的字母顺序进行排序。如何排序我的数组列表? 问题答案: 创建一个合适的对象,它将根据你所需的条件比较两个项目。然后在你的上使用 。 如果以后要按其他条件排序,请使用不同的再次调用。

  • 本文向大家介绍Python3之不使用第三方变量,实现交换两个变量的值,包括了Python3之不使用第三方变量,实现交换两个变量的值的使用技巧和注意事项,需要的朋友参考一下 method 1: method 2: 以上这篇Python3之不使用第三方变量,实现交换两个变量的值就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 有3个堆栈-A、B、C 堆栈A和B被排序(堆栈顶部的数字最大)。堆栈C为空,仅允许5次操作: 推,弹出,顶,is_empty,创建 我们需要编写一个函数来接收堆栈A和B,将堆栈A和B中的所有数字移动到堆栈C,堆栈C必须排序(最大数字在顶部)。 我有算法: 比较A的顶部和B的顶部 我开始写代码,但有错误,我不知道为什么! 代码:

  • 问题内容: 我有一个成员数组/切片: 我的问题是如何按,然后按。 问题答案: 使用sort.Slice(从Go 1.8开始可用)或sort.Sort函数对值的切片进行排序。 通过这两个功能,应用程序提供了一个功能,用于测试一个切片元素是否小于另一个切片元素。要按姓氏和名字排序,请比较姓氏和名字: less函数是使用带有sort.Slice的匿名函数指定的: less函数通过带有sort.Sort函

  • 我有一个Arraylist,我想按两个属性对ArrayList进行排序1。按名称(字母顺序)2。按自定义键 更多解释-: '

  • 本文向大家介绍写一个使两个整数进行交换的方法(不能使用临时变量)相关面试题,主要包含被问及写一个使两个整数进行交换的方法(不能使用临时变量)时的应答技巧和注意事项,需要的朋友参考一下 ES6 ES5 ES 6 这个 优秀