快速排序不得不说牛逼,比希尔更胜一筹,这次韩老师有点拉跨了(我爱老师),讲的不是很清晰,所以我没采纳,下面这个是比较喜欢的一种方法 通俗易懂 简洁明了
基本思路:
1.选定p为中心轴
2.将大于p的数字放在p的右边
3.将小于p的数字放在p的右边
4.分别对左右子序列重复前三步操作
首先写一个实现思路1.2.3的方法
//对那个中间数进行分组,小于中间数的放在左边 大于的放在右边
public static int get_mid(int arr[],int left,int right){
int p=arr[left];//定义最左边的那个数为中间数
while (left<right){
//从右边找第一个小于p的值
while (arr[right]>=p&&left<right){
right--;
}
//找到则放到p的左边
if (arr[right]<p){
arr[left]=arr[right];
}
//从左边找第一个大于p的值
while (arr[left]<=p&&left<right){
left++;
}
//找到则放在p的右边
if (arr[left]>p){
arr[right]=arr[left];
}
}
if (left>=right){//left=right说明左右指针相遇 扫描完毕
arr[left]=p;
}
return left;//返回中间数
}
然后写一个递归调用的方法实现思路4
//写一个递归调用方法扫描左右两边
public static void quickSort(int arr[],int left,int right){
if(left<right){//这个判断一定要加 不然就一直扫描左侧
int mid=get_mid(arr,left,right);
quickSort(arr,left,mid-1);//扫描左侧
quickSort(arr,mid+1,right);//扫描右侧
}
}
最后测试
public static void main(String[] args) {
int arr[]={4,5,6,72,1,3,0,8,2};
quickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
这是结果图

tips:对8000000条数据排序 shell(6.6s)quick(2.6s)

被折叠的 条评论
为什么被折叠?



