思想:
很好理解,就是你要从大到小或者从小到大怎么排,然后我每次从中找一个,给你最大或最小的。
分成两拨,一拨找好的有序的,一拨还没找无序的。
// 10 13 18 12 22 11 6 19 8
// max=22
//22 13 18 12 10 11 6 19 8
// 13 18 12 10 11 6 19 8
// 19 18 12 10 11 6 13 8
// 18 12 10 11 6 13 8
然后找到的跟前面的交换位置。
上代码:
//从大到小 public static void main(String[] args) { int[] data=new int[100_000]; for(int i=0;i<data.length;i++){//随机产生数据 data[i]=(int)(Math.random()*1000+1); } //int [] data =new int []{10 ,13 , 18 ,12 , 22, 11 , 6 , 19 , 8}; long startTime = System.currentTimeMillis(); //获取开始时间 for(int i=0;i<data.length-1;i++)//一层循环每个数走一遍 { int max_id=i;//第I个数 for(int j=i+1;j<data.length;j++)//二层循环分堆 { if(data[j]>data[max_id]) { max_id=j;//找到比前面的数大的数就取得下标 } } if(max_id!=i)//交换 { int temp= data[i]; data[i]=data[max_id]; data[max_id]=temp; } } long endTime = System.currentTimeMillis(); //获取结束时间 System.out.println("程序运行时间:" + (endTime - startTime) + "ms"); //输出程序运行时间 }
测试时间100_000:
还是快排快= =