当前位置: 代码迷 >> 综合 >> 算法 第四版 2.1.14 出列排序
  详细解决方案

算法 第四版 2.1.14 出列排序

热度:78   发布时间:2023-09-23 03:28:26.0

说说你会如何将一副扑克牌排序,限制条件是只能查看最上面的两张牌,交换最上面的两张牌,或是将最上面的一张牌放到这摞牌的最下面。


思路:模仿冒泡排序

冒泡排序是移动i(即数组指针),而我们可以通过移动数组来近似实现

我们可以固定交换前两个,移动数组


package Cap2_1;import edu.princeton.cs.introcs.StdIn;
import edu.princeton.cs.introcs.StdOut;
import edu.princeton.cs.introcs.StdRandom;public class Test extends Shell{public static void sortX(Comparable[] a){int N = a.length;while(!isSorted(a)){for(int j=0;j<N-1;j++){if(less(a[1], a[0])) {  exch(a, 0, 1);   //第一张和第二张交换}for(int z=0;z<N-1;z++) exch(a, z, z+1); //第一张放到最后}for(int z=0;z<N-1;z++) exch(a, z, z+1);}}public static void main(String[] args) {for(int i=0;i<10;i++){int N = 10+i*10;Integer[] a = new Integer[N];for(int j=0;j<N;j++)a[j] = (int)(StdRandom.random()*N);StdRandom.shuffle(a);sortX(a);
//			show(a);assert Shell.isSorted(a);}}
}


  相关解决方案