1.概念:所谓排序就是比较两个关键字大小,然后将一个序列的记录从一个位置移动到另一个位置,以达到一个从小到大的有序的序列,快速排序属于交换排序的一种。
2.基本思想:它的基本思想是通过一趟排序,将待排序记录分割成独立的两部分,其中一部分均比关键字小,另一部分均比关键字大,然后对分出来的两部分进行递归排序,直到待排序记录只有一条即可,
3.优势:它的优势是在于排列后的左侧记录不用和右侧的记录再次比较,只是在各自的一侧再进行划分比较,知道序列为一个数据位置,下面是实现这个排序的代码。
4.代码
package a;
public class QuicklySort
{
public static void main(String[] args)
{
quicksort qs = new quicksor();
int data[] = {44,22,2,32,54,22,88,77,99,11}; //需要排序的数组
qs.data = data; //将该数组赋值给快速排序的数组
qs.sort(0, qs.data.length-1); //调用排序方法
qs.display(); //显示排序后的记录
}
}
class quicksort
{
public int data[];
private int partition(int sortArray[],int low,int high)
{
int key = sortArray[low]; //关键字通常设置为序列的第一项
while(low<high)
{
while(low<high && sortArray[high]>=key) //判断记录右侧是否有小于关键字的记录
high--; //如果没有,则移动右侧的指针
sortArray[low] = sortArray[high]; //如果有则交换
while(low<high && sortArray[low]<=key) //判断记录左侧是否有大于关键字的记录
low++; //如果没有,则移动左侧的指针
sortArray[high] = sortArray[low]; //如果有则交换
}
sortArray[low] = key; //排序的终止条件是左侧指针和右侧指针重合,即low=high
return low;
}
public void sort(int low,int high)
{
if(low<high)
{
int result = partition(data,low,high); //产生一个序列以后,会出现两个序列,左边全比关键字小,右边全比关键字大
sort(low,result-1); //递归,取排列序列的返回值为减去1为high
sort(result+1,high); //递归,取排序序列的返回值加1位low
//因为result左侧的值都比它小,右侧的值都比他大,所以result的值
} //不参与比较
}
public void display()
{
for(int i=0;i<data.length;i++) //利用循环,输出排列后的序列
{
System.out.print(data[i]);
System.out.print(" ");
}
}
}