【排序】例题:小哼买书(桶排序、冒泡排序、快速排序)

题:输入n个整数,进行去重、从小到大排序,输出。运行时间限制为1秒。

解:第一种方法:先将n个图书的ISBN号去重,再进行从小到大排序并输出,例如桶排序。

一.桶排序

思想:用数组记录出现的图书号,存在则为1,输出数组中值为1的数组下标。

实现:

#include
int a[101],n; //定义全局变量,这两个变量需要在子函数中用到

void QuickSort(int low, int high)
{
    int i,j,pviot;
    if(low>high)
        return;
    pviot=a[low];i=low;j=high;
    while(i!=j)
    {
        while(i=pviot)j--;
        a[i]=a[j];
        while(i


时间复杂度:O(M+N)


第二种方法:先从小到大排序,在输出的时候去重。

1.采用冒泡排序,在输出的时候判断这个数a[i]与前面一个a[i-1]是否相同,不相同则输出。

实现:

#include

int main()
{
    int a[1000],i,j,n,t,x,y=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&t);
        a[i]=t;
    }

    for(i=1;ia[j+1])
            {
                x=a[j];
                a[j]=a[j+1];
                a[j+1]=x;
            }
        }
    }

    printf("%d ",a[1]);
    for(i=2;i<=n;i++)
        if(a[i]!=a[i-1])
        {
            y++;
            printf("%d ",a[i]);
        }

    printf("\n%d ",y+1);
}

时间复杂度:O(n²)

2.采用快速排序

//先排序后去重,快速排序

#include

int a[1000];

void Quicksort(int low,int high)
{
    int i=low,j=high,pviot=a[low];
    if(i>j)
    {
        return;
    }
    while(i!=j)
    {
        while(i=pviot) j--;
        a[i]=a[j];
        while(i

时间复杂度:O(NlogN)


总结:桶排序最快。






你可能感兴趣的:(姚姚的数据结构算法实现)