1. 程式人生 > >十六 、快速排序

十六 、快速排序

turn ftp spl isp 劃分 ray oid ptr 交換

public class QuickSort {


//劃分數組
public static int partition(int[] array ,int left,int right,int point)
{
int leftptr = left -1;
int rightptr = right;

while(true)
{
//左邊右移
while(leftptr<rightptr && array[++leftptr] < point);
//右邊左移
while(leftptr < rightptr && array[--rightptr]>point);

if(leftptr >= rightptr)
break;
else
{
int tmp = array[leftptr];
array[leftptr] = array[rightptr];
array[rightptr] = tmp;
}

}
//將關鍵字與當前指向交換
int tmp = array[leftptr];
array[leftptr] = array[right];
array[right] = tmp;
return leftptr;
}


//快速排序
public static void sort(int[] array ,int left,int right)
{
if(left >= right)
return;
//設置關鍵字
int point = array[right];
//獲得切入點,對數組進行劃分
int partion = partition(array, left, right, point);
//對左邊子數組進行快排
sort(array, left,partion -1);
//右邊數組快排
sort(array, partion+1, right);

}

public static void display(int[] array)
{
System.out.print("[");
for(int num:array) //for的高級用法
{
System.out.print(num+" ");
}
System.out.print("]");
System.out.println();
}

}

十六 、快速排序