快速排序的思想:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
主要思路:
先从后面开始遍历找到比key值小的一个值,把这个值放到key的前面,再从前面开始遍历找比key大的值;
代码如下:
// QuickSort.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; void QuickSort(int a[], int start,int end) { if (start > end) { return; } int i = start; int j = end; int k = a[i]; while (i < j) { while (i < j && a[j] > k)//先从后面开始找小于k的值 j--; a[i] = a[j];//找到小于k的值,替换a[i] while (i < j && a[i] < k)//从前面找大于k的值 i++; a[j] = a[i];//找到大于k的值,刚才a[j]的值已经赋刚才的a[i];a[j]的值用现在找到的大于k的值填充 } a[j] = k;//最后i = j; 把k的值赋给a[i]; QuickSort(a,i+1,end); QuickSort(a,start,i-1); } int _tmain(int argc, _TCHAR* argv[]) { int a[] = {1,3,5,7,9,2,4,6,8,0}; int len=sizeof(a)/sizeof(a[0])-1; for(int i=0;i<=len;i++) { cout<<a[i]<<" "; } cout<<endl; cout<<"快速排序后:"<<endl; len=sizeof(a)/sizeof(a[0])-1; QuickSort(a,0,len); for(int i=0;i <= len;i++) { cout<<a[i]<<" "; } getchar(); return 0; }
时间: 2024-12-18 23:34:56