快速排序:和冒泡排序一样都是基于交换排序思想的。
其排序流程如下:
1、首先设定一个分界值,通过分界值将数组分成左右两部分;
2、将大于数组分界值的数据集中在数组的右边,将小于数组分界值的数据集中在数组的左边;
3、然后,左边和右边的数据可以独立的排序,对于左边的数组数据,又可以去一个分界值,将该部分数据分成左右两个部分,同样左边放置较小数据,右边放置较大数据。右侧
的数组数据也同样这么做;
4、重复上面的操作,即可。
public class QuickSort
{
//固定数组大小
static final int SIZE = 6;
public static void main(String[] args)
{
//初始化数组
int[] nums = new int[SIZE];
for(int i=0;i<SIZE;i++){
nums[i] = (int)(Math.random()*100);
}
//输出为排序之前的数组
System.out.println("排序之前的数组为:");
for(int i = 0;i<SIZE;i++){
System.out.print(nums[i]+" ");
}
System.out.println();
//执行快速排序
quickSort(nums,0,SIZE-1);
//输出排序之后的数组
System.out.println("输出排序之后的数组为:");
for(int i = 0;i<SIZE;i++){
System.out.print(nums[i]+" ");
}
}
public static void quickSort(int[] nums,int left,int right){
int ltemp,rtemp;
int f,temp;
ltemp = left;
rtemp = right;
f = nums[(left+right)/2];
while(ltemp<rtemp){
while(nums[ltemp]<f){
ltemp++;
}
while(nums[rtemp]>f){
rtemp--;
}
if(ltemp<=rtemp){
temp = nums[ltemp];
nums[ltemp] = nums[rtemp];
nums[rtemp]=temp;
ltemp++;
rtemp--;
}
}
if(ltemp==rtemp){
ltemp++;
}
//利用递归进行调用
if(left<rtemp){
quickSort(nums,left,ltemp-1);
}
if(ltemp<right){
quickSort(nums,rtemp+1,right);
}
}
}