- -我的算法太差了,看来看去排序算法还是不会。最近看到了快排,发现很多网站上面的代码都不能正确运行,参考了一下他们的代码,,其实也差不多,自己再修改一下,我自己测试是可以运行的。
其实快排的原理就是递归,先选定一个key,把这个key作为参考值,从右往左遍历找出比key小的数,从左往右找出比key大的数,然后两个数交换,当左指针=右指针时,一次排序就完成了,此时数组被分成了以key为分界线的两个数组,再接着对这两个数组进行排序。
代码如下
1 import java.util.Arrays; 2 3 public class MySort { 4 public static void sort(int[] arr,int low,int high){ 5 //递归出口 6 while(low>high){ 7 return ; 8 } 9 int i=low; //左指针 10 int j=high; //右指针 11 int key=arr[low]; //定义key 12 while(i<j){ 13 while(i<j && arr[j]>key){ //从右往左遍历,找出比key小的值,如果比key大,指针左移 14 j--; 15 } 16 while(i<j && arr[i]<key){ //从左往右遍历,找出比key大的值,如果比key小,指针右移 17 i++; 18 } 19 if(i<j){ //交换两个数 20 int t=arr[i]; 21 arr[i]=arr[j]; 22 arr[j]=t; 23 } 24 } 25 //此时数组被分为两个以key为分界岭的两个数组,再递归排序这两个子数组 26 sort(arr,low,i-1); 27 sort(arr,i+1,high); 28 } 29 30 public static void main(String[] args) { 31 int[] a={45,34,67,23,100,98,1,3,2}; 32 sort(a, 0, a.length-1); 33 System.out.println(Arrays.toString(a)); 34 } 35 36 }