快速排序算法:是建立在普通排序和冒泡排序的基础上的排序,也使用递归,更加能快速和有效的对数据进行排序,与普通与冒泡排序不同的是,快速排序算法中多了分区,就是比大小在分区。
特点:会比一般的排序方法更节省时间。
接下来给大家说说快速排序的原理:
首先我们有不同的一组数据,大小是打乱的,要怎样用快速排序的方式来排序呢?
挖坑的方法:
1大部分情况下就将第一个数设为准基数,在准基数下面挖一个坑,我们就将5设为准基数。
2由后向前找,如果这个数比准基数小,找到这个数挖出来放到前一个坑中去。
3由前向后找,如果这个数比准基数大,找到这个数挖出来放到前一个坑中去。
比如:
我们从最右边向左边找,从8开始找,与准基数比较,如果找到的数比准基数(5)小,这个数就会形成一个坑,如果比准基数(5)大则过,8比准基数大,过,0比准基数小,形成一个坑:
按照挖坑的方法,由后向前找,如果这个数比准基数小,找到这个数挖出来放到前一个坑中去。就是是0放到前一个坑去,而5准基数所在的坑就是前一个坑,所以就是0这个数放到5这个坑里面
由后向前找,如果这个数比准基数小,找到这个数挖出来放到前一个坑中去
在从由前向后找,如果这个数比准基数大,找到这个数挖出来放到前一个坑中去。从7开始找,如果比准基数大就挖坑,放到前一个坑中去,
以此类推:最后就能排序出来。
以下是关于图片的代码:
package com.Zking.quick;
//快速排序的实现代码
public class Quicksort {
public static void querysort(int [] arr,int start,int end) {
//分区索引位
if(start < end) {
int index=getIndex(arr,start,end);
querysort(arr, 0,index-1);
querysort(arr, index+1,end);
}
}
public static int getIndex(int [] arr,int start,int end) {
int i=start,j=end;
//挖第一个坑位
int x=arr[i];//x是基准数
while(i<j) {
//从右边到左边对比,比较小于X的数
while(i<j && arr[j]>=x) {
j--;
}
if(i<j) {
//把找到的元素存在第一个坑位
arr[i]=arr[j];
i++;
}
//从左边到右边对比,大于等于X的数
while(i<j && arr[i]<x) {
i++;
}if(i<j) {
arr[j]=arr[i];
j--;
}
}
arr[i]=x;
return i;
}
//调用方法
public static void main(String[] args) {
int [] arr={5, 3, 9, 1, 6, 7, 2, 4, 0, 8};
querysort(arr,0,arr.length-1);
for (int i : arr) {
System.out.println(i);
}
}
我添加的数组
{5, 3, 9, 1, 6, 7, 2, 4, 0, 8};
运行结果:
以下是我的见解,有不足的地方多多指教!