桶排序和快排函数
@
桶排序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);
}