快速排序的原理就是使用某个中间值将数组切割成两部分,一部分比中间值都小,另一部分比中间值都大,这是一次排序的作用;分别对两部分进行同样的操作,直到只剩下一个数,这样最终的数组就变成了有序的。
以下是java实现:
package com.kdyzm.sort.quicksort;
import java.util.Scanner;
/**
* 快速排序相关P272
*
* @author kdyzm
*
*/
public class QuickSortDemo {
public static void main(String[] args) {
int[] array = new int[1024];
Scanner sc = new Scanner(System.in);
int total = sc.nextInt();
for (int i = 0; i < total; i++) {
array[i] = sc.nextInt();
}
quickSort(array, 0, total - 1);
output(array, total);
}
private static void output(int[] array, int total) {
for (int i = 0; i < total; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
}
private static void quickSort(int[] array, int low, int high) {
if (low < high) {
int pivotLoc = OneQuickSort(array, low, high);
quickSort(array, low, pivotLoc - 1);
quickSort(array, pivotLoc + 1, high);
}
}
/**
* 一次快速排序,找出中间点出来
*/
private static int OneQuickSort(int[] array, int low, int high) {
int pivotKey = array[high];
while (low < high) {
while (low < high && array[low] <= pivotKey)
++low;
array[high] = array[low];
while (low < high && array[low] >= pivotKey)
--high;
array[low] = array[high];
}
array[low] = pivotKey;
return low;
}
}
输入N个数作为数组长度,然后输入N个无序的整数,回车即可查看排序结果。