详解快速排序 -秒懂
点关注不迷路,欢迎再访!
精简博客内容,尽量已专业术语来分享。
努力做到对每一位认可自己的读者负责。
帮助别人的同时更是丰富自己的良机。
快速排序算法和冒泡排序算法类似,都是基于交换排序思想的。快速排序算法对冒泡排序算法进行了改进,从而具有更高的执行效率。
快速排序算法通过多次比较和交换来实现排序,其排序流程如下:
1.首先设定一个分界值,通过该分界值将数组分成左右两部分。
2.将大于等于分界值的数据集中到数组的右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于等于分界值,而右边部分中各元素都大于等于分界值。
3.然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样将左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
4.重复上述过程,可以看出这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两部分各数据排序完成后,整个数组的排序也就完成了。
public static void main(String[] args) {
int [] arr = {69,62,89,37,97,17,28,49};
quickSort(arr,0,arr.length-1);
System.out.print("排序后的数组结果:\n"); //输出每步排序的结果
for (int h = 0; h < arr.length; h++) {
System.out.print(arr[h]+" ");
}
System.out.print("\n");
}
public static void quickSort(int [] arr,int left,int right) {
int f,t;
int rtemp,ltemp;
ltemp = left;
rtemp = right;
f = arr[(left + right)/2]; //分界值
while(ltemp < rtemp) {
while(arr[ltemp] < f) {
++ltemp;
}
while(arr[rtemp] > f) {
--rtemp;
}
if(ltemp <= rtemp) {
t = arr[ltemp];
arr[ltemp] = arr[rtemp];
arr[rtemp] = t;
--rtemp;
++ltemp;
}
}
if(ltemp == rtemp) {
ltemp++;
}
if(left < rtemp) {
quickSort(arr,left,ltemp-1); //递归调用
}
if(ltemp < right) {
quickSort(arr,rtemp+1,right); //递归调用
}
}
排序后的数组结果:
17 28 37 49 62 69 89 97