快速排序的代码如下:
public class Counter {
public static int a[] = {5,2,1,0,3,9,2};
private static int size = a.length;
public static void main(String args[])
{
quickSort();
for(int i =0;i < a.length;i++)
{
System.out.print(a[i]);
}
}
public static void quickSort() {
if(a.length>0) {
quickSort(0 , a.length-1);
}
}
private static void quickSort( int low, int high) {
//1,找到递归算法的出口
if( low > high) {
return;
}
//2, 存
int i = low;
int j = high;
//3,key
int key = a[ low ];
//4,完成一趟排序
while( i< j) {
//4.1 ,从右往左找到第一个小于key的数
while(i<j && a[j] > key){
j--;
}
// 4.2 从左往右找到第一个大于key的数
while( i<j && a[i] <= key) {
i++;
}
//4.3 交换
if(i<j) {
int p = a[i];
a[i] = a[j];
a[j] = p;
}
}
// 4.4,调整key的位置
int p = a[i];
a[i] = a[low];
a[low] = p;
for(int k =0;k < a.length;k++)
{
System.out.print(a[k]);
}
System.out.println();
//5, 对key左边的数快排
quickSort( low, i-1 );
//6, 对key右边的数快排
quickSort( i+1, high);
}
public static void normolSort()
{
for (int i = 0;i < size ; i++ )
{
for (int j = i+1;j < size ; j++)
{
if(a[i]>=a[j])
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
}
核心思想:
将第一个数作为基准数,然后设置两个“哨兵数”,一前一后,前面的数向后挪,后面的数向前挪,前面的哨兵直到遇到比基准数大的数停下,后面的数,直到遇到比基准数小的数,停下,交换两数,当两者相遇时,一轮排序结束,将基准数放在哨兵相遇的位置,然后左边的部分重新开始快排,右边的数也进行快排,递归进行。