桶排序和快排函数

@

桶排序bucket sort

概述(哈希的感觉)

要求:数字是有一定范围的

基本思想:分配+收集

具体:
-----(分配) : 设置若干个箱子,将关键字为k的数据,放入第k个箱子,
-----(收集) :然后按序号草将非空的连接

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int n;
    scanf("%d",&n);
    int i;
    int a;
    int hash[101];
    memset(hash, 0, sizeof(hash));
    for(i=1; i<=n; i++)
    {
        scanf("%d",&a);    
        hash[a]++;
    }
    for(i=0; i<=100; i++)
    {
        if(hash[i]!=0)
            printf("%d %d\n",i,hash[i]);
    }

    return 0;
}

快排函数模板代码

void q_sort (int a[], int l, int r)
{
    if(l>=r) return;
    int i=l,j=r,key=a[l];
    while(i<j)
    {
        while(i<j&&key<=a[j]) j--;//注意是小于等于
        a[i]=a[j];
        while(i<j&&key>=a[i]) i++;
        a[j]=a[i];
    }
    a[i]=key;

    q_sort(a,l,i-1);//注意是j-1和i+1,不包括i,因为i的位置一定是对的
    q_sort(a,i+1,r);
}

posted @ 2021-09-03 19:12  kingwzun  阅读(53)  评论(0编辑  收藏  举报