2007winter

做自己真心想做的事,你就没事了

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

快速排序是由冒泡排序改进而得的,也是交换排序的一种。

快速排序的基本思想如下:从线性表中选取一个元素,设为T,然后将线性表后面小于T的元素移到前面,而前面大于T的元素移到后面,结果就将线性表分成了两部分(称为两个子表),T插入到其分界线的位置处。这个过程称为线性表的分割。通过对线性表的一次分割,将线性表分为前后两个字表,且前面子表中的所有元素均不大于T,而后面子表中的所有元素都不小于T。

如果对分割后的子表再按上述原则进行分割,并且这种分割可以一直做下去,直到所有子表为含有一个元素,此时线性表就变成了有序表。

快速排序的平均时间复杂度为O(nlogn),它是不稳定的。

代码:

#include <iostream>
using namespace std;
#define T int

void quick_sort(T R[],int s, int t)//把R[s]至R[t]的元素进行快速排序
{
    int low=s,high=t; 
    T temp;
    temp=R[s];  //用区间的第1个记录作为基准
    if(low<high)
    {        
        while (low<high)//从区间两端交替向中间扫描,直至low=high为止
        {
            while((low<high)&&(R[high]>temp))
                high=high-1; //逐渐减小high,直到发现R[high]<temp
            if (low<high)//表示找到这样的R[high],R[low]和R[high]交换
            {
                R[low]=R[high];

                low=low+1;
            }

            while ((low<high)&&(R[low]<temp))
                low=low+1; //逐渐增大low,直到发现R[low]>temp
            if (low<high)//表示找到这样的R[low],R[high]和R[low]交换
            {
                R[high]=R[low];
                high=high-1;
            }
        }
        R[low]=temp;
        quick_sort(R,s,low-1);
        quick_sort(R,low+1,t);                        
    }
}



int main()
{
    int a[10];
    int i;

    cout<<"输入原始序列:"<<endl;
    for (i=0;i<10;i++)
    {
        cin>>a[i];
    }
    cout<<endl;

    quick_sort(a,0,9);
    cout<<"排序后:"<<endl;
    for (i=0;i<10;i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;

    return 0;
}

 

 

posted on 2012-06-07 15:26  2007winter  阅读(118)  评论(0)    收藏  举报