快速排序

用快速排序法对一组数据由小到大进行排序,数据分别为99,45,12,36,69,22,62,796,4,696.

  • 快速排序是冒泡排序的一种改进,主要的算法思想是在待排序的n个数据中取第一个数据作为基准值,将所有记录分为3组,使第一组数中各数据值均小于或等于基准值,第二组做基准值的数据,第三组中各数据值均大于或等于基准值。这便实现了第一趟分割,然后再对第一组和第三组分别重复上述方法,依此类推,直到每组中只有一个记录为止。
方法一:
#include <stdio.h>

void qusort(int s[],int start,int end)
{
    int i,j;
    i=start;  /*将每组首个元素赋给i*/
    j=end;    /*将每组末尾元素赋给j*/
    s[0]=s[start]; /*设置基准值*/
    while(i<j)
    {
        while(i<j&&s[0]<s[j])
            j--;   /*位置左移*/
        if(i<j)
        {
            s[i]=s[j];  /*将s[j]放到s[i]的位置上
            i++;    /*位置右移*/
        }
        while(i<j&&s[i]<s[0])
            i++;
        if(i<j)
        {
            s[j]=s[i];
            j--;
        }
    }
    s[i]=s[0];
    if(start<i)
        qusort(s,start,j-1);
    if(i<end)
        qusort(s,j+1,end);
}
void main()
{
    int i,a[11];
    printf("请输入10个数:\n");
    for(i=1;i<11;i++)
        scanf("%d",&a[i]);
    qusort(a,1,10);
    printf("排序后的顺序是:\n");
    for(i=1;i<11;i++)
        printf("%5d",a[i]);
}
方法二:
#include <stdio.h>
#include <stdlib.h>
void qusort(int a[],int start,int end)//对start和end之间的元素排序
{
    int i,j,t;
    i=start;
    j=end;
    if(start<end)//区间内至少存在两个元素
    {
         t=a[start];//用区间的第一个元素做基准
        while(i!=j){//从区间两端开始扫描,直到i和j相等
            while(a[j]>=t&&i<j)//从右向左,找到第一个小于t的元素
                j--;
            a[i]=a[j];//i,j上的元素交换
            while(a[i]<=t&&i<j)
                i++;
            a[j]=a[i];
        }
        a[j]=t;
        qusort(a,start,j-1);
        qusort(a,j+1,end);
    }

}
void main()
{
    int i,a[10];
    printf("请输入十个数:");
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    qusort(a,0,9);
    printf("排序后的数组为:");
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
}

posted on 2018-07-28 19:59  breathee  阅读(104)  评论(0编辑  收藏  举报

导航