/********************************* * 日期:2014-04-01 * 作者:SJF0115 * 题目:快速排序 **********************************/ #include <iostream> #include <stdio.h> using namespace std; //对子数组array[p...r]就地重排 int Partition(int array[],int p,int r){ int j,temp; //定义哨兵 int x = array[r]; //i为小于哨兵元素的最后一个元素下标 int i = p - 1; //j为待排序元素的第一个元素 for(j = p;j < r;j++){ //跟哨兵比较 if(array[j] < x){ i++; //交换array[i] array[j] temp = array[j]; array[j] = array[i]; array[i] = temp; } } //交换array[i+1](大于哨兵元素的第一个元素) array[r] temp = array[i+1]; array[i+1] = array[r]; array[r] = temp; //返回分割下标 return i + 1; } //快排 void QuickSort(int array[],int p,int r){ if(p >= r || array == NULL){ return; } int index = Partition(array,p,r); QuickSort(array,p,index-1); QuickSort(array,index+1,r); } int main() { int array[] = {2,8,7,1,3,5,6,4}; QuickSort(array,0,7); for(int i = 0;i <= 7;i++){ printf("%d\n",array[i]); } }
原文地址:http://blog.csdn.net/sunnyyoona/article/details/24916745