快速排序算法

什么叫快速排序?

快速排序是对冒泡排序的一种改进,将先排好的大小顺序的数据分割成两部分,其中一部分数据比另一部分小,按这种方式继续。知道排完,整个过程用递归进行达到了有序。


快速排序算法的作用?

让无序数组变有序数组,节省了大量时间,实现简单,平均性能好。

什么时候用快速排序:
对时间复杂度O(nlogn)依然不满意的情况下使用快速排序
如何认识快速理解概念:

第一步:定义几个数字,然后设两个变量指向首尾两个数字

35            45            88           65              34              99              65         12                   我先分别把55和12

@1                                                                                                            @2              作为开始的变量@1,@2作为标注一下

第二步:定义一个基准数,然后从后往前一一比较 如:55和45比  55和99比   55和78比  找到最后一个比55小的数,交换位置

12           45             88              65            34            99              65           35 

@1                                                                                                              @2 

第三步:从前往后找到第一个比@1代表的数大的数字,然后和@2交换位置

12          35             88              65            34             99              65            4

              @1                                                                                                @2 

第四步:从后往前找到第一个比45小的数,让45和比45小的数交换位置

12          34            88              65            35             99              65            4

              @1                                            @2 

重复第三步,找到比@1大的第一个数,然后和@2交换位置

12          34            35              65            88             99              65            4

                             @1                             @2 

重复第四步从后往前找到比@2小的第一个数,然后交换位置

12          34            35              88            65             99              65            4

                             @1             @2 

最后重复第三步,找到比@1大的第一个数,然后和@2交换位置

12          34            35              88            65             99              65            4

                                             @1  @2 

最后@1@@2都指向了88,所得到的就是第一趟的序列.


代码如下:

static void quicksort(int [] a,int left,int right) {
if(a==null || a.length<=1) {
return;
}
if(left<right) {
int i=left;
int j=right;
int h=a[left];
//选择第一个作为基准数
/**
 * 分制
 */

while(i<j) {
while(i<j && a[j]>=h) {
j--;
}
//交换位置
if(i<j){
a[i]=a[j];
i++;
}
while(i<j && a[i]<h) {
i++;
}
//交换位置
if(i<j) {
a[j]=a[i];
j--;
}
}
 //将基准数归位
a[i]=h;
/**
 * 递归
 */

quicksort(a,left,i-1);//处理左边的,这里是一个递归的过程
quicksort(a,i+1,right);//处理右边的,这里同样是一个递归的过程
}
}
//循环排序
public static void quick(int[] a) {
quicksort(a,0,a.length-1);
for (int i : a) {
System.out.print(i+" ");
}
}
public static void main(String[] args){
int[] a = { 49, 38, 65, 97, 76, 13, 27, 50 };
quick(a);

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值