快速排序 原理 源代码

快速排序原理:

将需要排序的数组按照一个数(可以是其中任意一个数),把比其小的数放在左边,比其大的数放在右边;然后将其左右两边边的数看成新的数组,继续这样排列,直到每个区域里只有两个数。

将数组按照一个数分为大小两边-->实现方法:(理论)

如有一个数组arr = {9 , 1 , 8 , 7 , 5 , 10 , 3, 6 }

将arr[0] 作为参照数->temp = arr[0];  arr[0]作为第一个空位(*将arr[0] 的值赋给了temp ,则arr[0]的位置可以看为一个空位:可以将其它的值放入此地)

左边int i = 0 ; 右边 int j = arr.length - 1;

第一步:将数组从右往左与参照数temp比较(arr[7] = 6 < temp=9 ),发现比其小的值是 放入第一个空位中 。arr[0] = arr[7]; 则arr[7]作为第二个空位

第二步:将数组从左往右与参照书temp比较(arr[5]=10 >temp = 9 ),发现比其大的数放在第二个空位中。arr[7] = arr[5]

此时左边i = 1 ; 右边j = 6; 数组为 temp = 9 {6,1,8,7,5,空,3,10};

以此类推,左边i =1 ,右边j=6 

j->i  找到比temp小的数 ,arr[6]=3<temp=9  ;则 arr[5]=arr[6] ,{6,1,8,7,5,3,空,10} . arr[6]成为空位;

i->j 找到比temp大的数,发现右边已经没有比temp大的数了。第一轮排序完毕。

将temp赋给空位空。arr[6]  = temp;

按照此方法开始第二轮的排列。第三轮。。。

源代码:

l为left 左边的第一个下标

r为right右边的最后一个下标

public static int [] quicksort(int arr[],int l,int r){
if(r>l)
 {
int
i=l;
int
j=r;
int temp=arr[l];
while(i<j){
while(i<j&&arr[j]>temp)
j--;
if(i<j){
arr[i++]=arr[j];
}
while(i<j&&arr[i]<temp)
i++;
if(i<j){
arr[j--]=arr[i];
}
}
arr[i]=
temp;
quick
sort(arr,l,i-1);
quick
sort
(arr,i+1,r);

}
return arr;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值