// quick_sort.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; /* 快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 如: 62 79 78 42 33 55 76 44 63 12 REF = Array[0] = 62 12与62交换,得到 12 79 78 42 33 55 76 44 63 62 79与62交换,得到 12 62 78 42 33 55 76 44 63 79 44和62交换,得到 12 44 78 42 33 55 76 62 63 79 78和62交换,得到 12 44 62 42 33 55 76 78 63 79 55和62交换,得到 12 44 55 42 33 62 76 78 63 79 排列结束 从上面过程中看出实际上交换的主要过程是用参考值交换。如果不想要用第一个数作为参考值,可以先选出某一个参考值预先交换到数组的第一个位置。 比如说一些平均分布的值,可以挑选一个与平均值相差最小的值。 */ void swap_int(int* i,int* j) { int temp = *i; *i = *j; *j = temp; } void part_sort(int* pArray,int count) { //以第一个作为参考 if (count <= 1) { return; } int Ref = pArray[0]; //以该参照值分界,大于的排列在其后,小于的排列在之前。 int i=0,j=count -1; do { while (pArray[j] >= Ref && j!=i)//忽略与参考值相同的值,让它在后续的二分过程中排序 { j --; } if (i == j) { break; } else { swap_int(&pArray[j],&pArray[i]); } while (pArray[i] <= Ref && j!=i)//忽略与参考值相同的值,让它在后续的二分过程中排序 { i++; } if (i==j) { break; } else { swap_int(&pArray[j],&pArray[i]); } } while (i!=j); //递归调用自己 int LeftCount = i; if (LeftCount>1) { part_sort(pArray,LeftCount); } int RightCount = count - i - 1; if (RightCount > 1) { part_sort(pArray+i+1,RightCount); } return; } void quick_sort(int iArray[],int count) { if (count <= 1) { return; } part_sort(iArray,count); } int _tmain(int argc, _TCHAR* argv[]) { int iValueToSort[64]; int InputValue; int iCount = 0; cout << "plz enter values to sort.press ctrl+break to end input!" <<endl; cout << "values:/t"; while (cin>>InputValue) { iValueToSort[iCount++] = InputValue; } cout << "The values you enter are :" << endl; for (int i=0;i!=iCount;++i) { cout << iValueToSort[i] << '/t'; } cout << '/n' << "Total count = " << iCount <<endl; quick_sort(iValueToSort,iCount); cout << "after sort: "<< endl; for (int i = 0; i!= iCount; ++i) { cout << iValueToSort[i] << '/t'; } cout << endl; return 0; }