快速排序的基本思想:
从待排序的的记录序列中,选取一个记录(通常选取的是第一个记录),其关键字是k1,然后将其余关键字小于k1的记录移到后面,而将关键字大于k1的移到前面,结构将待排序记录序列分成两个字表,最后将关键字为k1的记录插到其分界线的位置处。我们将这个过程称作一趟快速排序。然后对分割的子表,继续按上述原则进行分割,直到所有的子表的表长不超过1为止,此时待排序的记录序列就变成了一个有序表。
java代码:
package com.test.sort;
public class QKSort {
public static void main(String[] args) {
int[] array = {12, 54, 80, 98, 62, 11, 73, 26, 42, 27};
QKSort(array,0,array.length-1);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
}
public static void QKSort(int[] array, int left, int rigth) {
if(left>=rigth) {
return;
} else {
int pos = QKPass(array,left,rigth);
QKSort(array, left, pos-1);
QKSort(array, pos+1, rigth);
}
}
public static int QKPass(int[] array, int left, int rigth) { //一趟快速排序
int key = array[left]; //保存基准记录
int low = left;
int high = rigth;
while (low < high) {
while(low < high) { //从右向左找比key小的值
if(array[high]<key) {
array[low] = array[high]; //找到并进行交换
low ++ ;
break;
} else {
high -- ;
}
}
while(low < high) { //从左向右找比key大的值
if(array[low] > key) {
array[high] = array[low]; // 找到进行交换
high -- ;
break;
} else {
low ++ ;
}
}
}
array[low] = key; //将基准结点记录保存到low==high的位置
return low; //返回基准记录的位置
}
}
本文详细介绍了快速排序的基本思想及其在Java中的实现过程,包括一趟快速排序、分割子表及递归调用,最终将无序数组转化为有序数组。
18万+

被折叠的 条评论
为什么被折叠?



