快速排序
先来看看原理
下面就开始算法剖析
这里给出c++的代码
#define _CRT_SElE_NO_WARNINGS
#include<iostream>
using namespace std;
void swap(int arr[], int i, int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
int* partition(int arr[], int l, int r);//声明函数
void quickSort(int arr[], int l, int r) {
if (l < r) {
int* p = partition(arr, l, r);
quickSort(arr, l, p[0] - 1);
quickSort(arr, p[1] + 1, r);
}
}
int* partition(int arr[], int l, int r) {
int less = l - 1;
int more = r;
while (l < more) {
if (arr[l] < arr[r]) {//默认以最后一个元素为比较值
swap(arr, ++less, l++);
}
else if (arr[l] > arr[r]) {
swap(arr, --more, l);
}
else {
l++;
}
}
swap(arr, more, r);
return new int[] { less + 1, more };
}
int main(void)
{
int arr[10];
for (int i = 0; i < 10; ++i)
{
arr[i] = 9 - i;
}
int len = sizeof(arr) / sizeof(int);
cout << len << endl;
quickSort(arr, 0, 9);
for (int i = 0; i < 10; ++i)
{
cout << arr[i] << " ";
}
system("pause");
return 0;
}
这里给出JAVA的代码
public static void quickSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
quickSort(arr, 0, arr.length - 1);
}
public static void quickSort(int[] arr, int l, int r) {
if (l < r) {
swap(arr, l + (int) (Math.random() * (r - l + 1)), r);
int[] p = partition(arr, l, r);
quickSort(arr, l, p[0] - 1);
quickSort(arr, p[1] + 1, r);
}
}
public static int[] partition(int[] arr, int l, int r) {
int less = l - 1;
int more = r;
while (l < more) {
if (arr[l] < arr[r]) {
swap(arr, ++less, l++);
} else if (arr[l] > arr[r]) {
swap(arr, --more, l);
} else {
l++;
}
}
swap(arr, more, r);
return new int[] { less + 1, more };
}
public static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}