紫书_第八章_高效算法设计_8.2.2——快速排序

来源:互联网 发布:nginx做负载均衡 编辑:程序博客网 时间:2024/06/06 00:57

其分为三个步骤:

1.划分问题:把数组的各个元素重排后分成左右两部分,左边始终小于key,右边大于key。

2.递归求解:把左右两部分分别排序。

3.合并问题:其不用合并,因为此时数组已经有序。

来看代码:

/*************************************************************************> File Name: 1166.cpp> Author:chudongfang > Mail:1149669942@qq.com > Created Time: 2016年06月15日 星期三 16时43分32秒 ************************************************************************/#include<iostream>#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>#define INF (1ll<<60)-1using namespace std;typedef long long ll;void Q_sort(int a[],int n);int main(int argc,char *argv[]){    int a[100];    int n;    scanf("%d",&n);    for(int i=0;i<n;i++)        scanf("%d",&a[i]);        Q_sort(a,n);    for(int i=0;i<n;i++)          printf("%d ",a[i]);    return 0;}void Q_sort(int a[],int n){    int key=a[0];//利用key进行划分    int i=0,j=n-1;    if(n<=1)   return ;    else    {        while(i!=j)        {            for(;i<j;j--)                   if(a[j]<key)                 {                    a[i]=a[j];                    break;                }            for(;i<j;i++)                if(a[i]>key)                {                    a[j]=a[i];                    break;                }            if(i==j)   a[i]=key;        }        Q_sort(a,i);//递归求解             Q_sort(a+i+1,n-i-1);        //由于其已经有序,就不用再进行合并。    }}


0 0
原创粉丝点击