// 快速排序法.cpp : 定义控制台应用程序的入口点。
//
//快速排序时基于分治模式处理的,
// 对一个典型子数组A[p...r]排序的分治过程为三个步骤:
// 1.分解:
// A[p..r]被划分为俩个(可能空)的子数组A[p ..q-1]和A[q+1 ..r],使得
// A[p ..q-1] <= A[q] <= A[q+1 ..r]
//2.解决:通过递归调用快速排序,对子数组A[p ..q-1]和A[q+1 ..r]排序。
// 3.合并。
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
int partition(int a[], int p, int r) {
//为什么不能选a[p]为主元,因为对于一个已排序好的数组,仍然会打乱
int key = a[r];
int i = p - 1;
for (int j = p; j < r; ++j) {
if (a[j] <= key) {
++i;
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
int temp = a[i+1];
a[i+1] = a[r];
a[r] = temp;
return i + 1;
}
void QuickSort(int a[], int p, int r) {
if (p<r) {
int k = partition(a, p, r);
QuickSort(a, p, k - 1);
QuickSort(a, k + 1, r);
}
}
int main()
{
int array[] = {2, 4, 6, 8, 10, 12};
QuickSort(array, 0, 5);
for(int i = 0; i <= 5; i++)
printf("%d\t", array[i]);
return 0;
}
快速排序
最新推荐文章于 2024-07-17 10:35:12 发布