快速排序算法思想
(1)先从待排序记录中选取一个作为枢轴(pivot),并增设两个指针low和high分别指向待排序记录的首和尾;
(2)然后从high指针开始向前搜索,当找到小于枢轴的记录,则将此记录与枢轴记录的位置进行交换,接着从low指针出发向后搜索,当找到大于枢轴的记录,同样将此记录与枢轴位置进行交换;
(3)重复上面操作,直到low和high指向同一位置为止,再将枢轴放到该位置,即为一趟快速排序,递归地调用算法,多趟排序后即可排好。
快速排序算法的实现分为三个阶段:
(1)一次划分或一趟排序
(2)对子序列排序
(3)程序路口引入待排序列
package quick;
public class quick {
public static int partition(int[] arr,int left,int right)
{
int base=arr[left];
while(left<right) {
while(left<right&&arr[right]>base)
{
right--;
}
arr[left]=arr[right];
while(left<right&&arr[left]<=base)
{
left++;
}
arr[right]=arr[left];
}
arr[left]=base;
return left;
}
public static void sort(int[] arr,int left,int right)
{
if(left<right)
{
int index=partition(arr,left,right);
sort(arr,left,index);
sort(arr,index+1,right);
}
}
public static void printpart(int[] arr,int left,int right)
{
for(int i=left;i<=right;i++)
{
System.out.print(arr[i]+"\t");
}
System.out.println();
}
public static void main(String[] args)
{
int arr[]= {21,11,54,19,45};
System.out.print("排序前:\t");
printpart(arr,0,arr.length-1);
sort(arr,0,arr.length-1);
System.out.print("排序后:\t");
printpart(arr,0,arr.length-1);
}
}