快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
设要排序的数组是A[0]……A[N-1],首先任意选取一个数据作为standard(通常选用数组的最后一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面(其实只要保证所有比他小的元素都在其前面,则后一条件则自动满足了),这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。(信息来源:百度百科)
#include <iostream> #include <stdlib.h> #include <time.h> using namespace std; bool initArray(int *Array, int arraySize) { //初始化随机种子 srand(time(NULL)); for (int i = 0; i != arraySize; ++i) { //给数组用随机数赋值 Array[i] = rand(); } return true; } /*划分函数: 使得在Array[i+1]之前的元素都小于该元素 在Array[i+1]的元素都小于该元素 */ template <typename T, typename Index_t> Index_t partition(T *Array, Index_t prev, Index_t tail) { T standard = Array[tail]; Index_t i = prev - 1; //i以及i之前的数,都小于standard for (Index_t j = prev; j != tail; ++j) { //数组的任意元素,只要其小于或等于standard,就将其换到数组的前半段 //(因此,数组的后半段都是大于standard的元素) if (Array[j] <= standard) { ++ i; swap(Array[i],Array[j]); } } swap(Array[i+1],Array[tail]); //将standard的地址返回 return i + 1; } template <typename T, class Index_t> void quickSort(T *Array, Index_t prev, Index_t tail) { if (prev < tail) { Index_t q = partition(Array,prev,tail); //对数组的前半段进行划分 quickSort(Array,prev,q-1); //对数组的后半段进行划分 quickSort(Array,q+1,tail); } } int main() { int arraySize = 10; int *Array = new int[arraySize]; initArray(Array,arraySize); quickSort(Array,0,arraySize-1); for (int i = 0; i != arraySize; ++i) { cout << Array[i] << endl; } delete Array; }
原文地址:http://blog.csdn.net/zjf280441589/article/details/41076827