快速排序 java实现

- -我的算法太差了,看来看去排序算法还是不会。最近看到了快排,发现很多网站上面的代码都不能正确运行,参考了一下他们的代码,,其实也差不多,自己再修改一下,我自己测试是可以运行的。

其实快排的原理就是递归,先选定一个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 }

 

转载于:https://www.cnblogs.com/LolitaChen/p/8617602.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值