目标:将一个本身无序的数组按照从小到大的顺序或者从大到小的顺序排序。
基本思想:编写一个quickSort函数,函数的参数有三个,要排序的数组a[]、要排序的数组中的低下标low、要排序的数组高下标high。
接着在遍历时当low<high时:每次均把最小的下标的数组中的数赋值给暂存变量temp。当左右两边的下标没有发生交叉时完成下面的工作:
比较数组中最后一个数与temp大小,如果比temp大,则将现行的下标减一,并将此时的左右下标位置处的数进行交换;否则,不对现行下标执行减一操作,仅将左右下标数交换。同理比较数组中第一个数与temp大小,如果比temp小,则将左下标加一,接着将左右位置处的数进行交换,否则,不执行减一操作,仅交换左右两边数。(这是按照从小到大排序的,如果要从大到小,则按照相反的操作即可)。
代码如下(JAVA)
package 排序;
public class QuickSort {
public static void main(String[] args) {
int a[] = {8,4,1,2,0,-2,10,10,10,5,2,7,9};
quickSort(a,0,a.length-1);
for(int i = 0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
}
public static void quickSort(int[] a,int low,int high) {
int left = low;
int right = high;
if(left<=right) {
int temp = a[low];
while(left!=right) {
while(left<right&&a[right]>=temp) {
right--;
}
a[left] = a[right];
while(left<right&&a[left]<=temp) {
left++;
}
a[right] = a[left];
}
a[left] = temp;
quickSort(a, low, left-1);
quickSort(a, left+1, high);
}
}
}