码迷,mamicode.com
首页 > 编程语言 > 详细

OJ刷题---分治法快速排序

时间:2015-06-04 09:59:20      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:算法   iostream   c++   

   输入代码:

//算法分析
//1)设置两个变量I、J,排序开始的时候:I=0,J=N-1;
//2)以第一个数组元素作为关键数据,赋值给key,即 key=A[0];
//3)从J开始向前搜索,即由后开始向前搜索(J=J-1即J--),找到第一个小于key的值A[j],A[j]与A[i]交换;
//4)从I开始向后搜索,即由前开始向后搜索(I=I+1即I++),找到第一个大于key的A[i],A[i]与A[j]交换;
//5)重复第3、4、5步,直到 I=J; (3,4步是在程序中没找到时候j=j-1,i=i+1,直至找到为止。找到并交换的时候i, j指针位置不变。另外当i=j这过程一定正好是i+或j-完成的最后另循环结束。)

#include <iostream>
using namespace std;
void Quicksort(int a[],int low,int high)
{
    if(low>=high)
    {
        return ;
    }
    int first=low;
    int last=high;
    int key=a[first];
    while(first<last)
    {
         while(first < last && a[last] >= key)
        {
            --last;
        }
        a[first] = a[last];
        while(first < last && a[first] <= key)
        {
            ++first;
        }
        a[last]=a[first];
    }
    a[first]=key;
    Quicksort(a,low,first-1);
    Quicksort(a,last+1,high);
}
int main()
{
    int i,a[100],x,n=0;
    cin>>n;
    for(i=0; i<n; i++)
        cin>>a[i];
    Quicksort(a,0,n-1);
    for(i=0; i<=n-1; i++)
        cout<<a[i]<<" ";
    cout<<endl;
    return 0;
}

 运行结果:

技术分享



OJ刷题---分治法快速排序

标签:算法   iostream   c++   

原文地址:http://blog.csdn.net/linhaiyun_ytdx/article/details/46351539

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!