快速排序
排序算法分为以下几类:
1、插入排序
2、交换排序
3、选择排序
4、归并排序
5、基数排序
一、基本思想
交换排序包含了两种排序:一个是冒泡排序,一个是快速排序。本文主要讲解快速排序,所谓快速排序,实质上是一种分治思想,在序列中找到一个中间值,以这个中间值作为标准,使得中间值左边的关键字(数据)比它小,右边的关键字(数据)比它大。
二、代码实现
2.1、程序源代码
package com.bubaiwantong.sort;
/**
* 快速排序
* @author 不败顽童
*/
public class QuickSort {
public void sort(int arr[], int left, int right) {
if (left >= right){
return;
}
int mid = partition(arr, left, right);
sort(arr, left, mid - 1);
sort(arr, mid + 1, right);
}
public int partition(int arr[], int leftBound, int rightBound) {
int temp = arr[rightBound];
int left = leftBound;
int right = rightBound - 1;
while (left <= right) { //当左边的指针小于右边的指针才运行
while (left <= right && arr[left] <= temp) //从左边开始扫描,小的数一直放过,直到遇到一个大数
left++;
while (left <= right && temp < arr[right]) //从右边开始扫描,大的数一直放过,直到遇到一个小数
right--;
if (left >= right)
break;
swap(arr, left, right); // 左边和右边扫描同时停止了就开始进行交换
}
swap(arr, left, rightBound); // left=right,也可以写成right,这个最终停止的位置就是中间值的位置。
return left;
}
public void printArr(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
public void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
// int[] arr = new int[]{9, 8, 7, 6, 5, 4, 3, 2, 1};
int[] arr = new int[]{7, 4, 5, 6, 8, 9, 3, 1, 2};
QuickSort quickSort = new QuickSort();
quickSort.sort(arr, 0, arr.length - 1);
quickSort.printArr(arr);
}
}
2.2、运行结果
1 2 3 4 5 6 7 8 9
Process finished with exit code 0