您的位置:首页 > 编程语言 > C语言/C++

C++ 算法之快速排序

2014-12-16 15:29 260 查看
快速排序的思想:



通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。



主要思路:



先从后面开始遍历找到比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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: