目录
算法解释
例如有5个数字,8,61,75,15,53,现在要将他从小到大排序输出。哈希排序的核心在于将时间复杂度转化为空间复杂度。具体操作为:定义两个数组,第一个存放排序前的数字,第二个存放数字的下标。
例如定义一个a [ 5 ] , b [ 100 ] = { 0 }
a [ 0 ] = { 8 } , a [ 1 ] = { 61 }......
b [ 8 ] = 1 , b [ 61 ] = 1......即是b [ a [ 0 ] ] = 1 , b [ a [ 1 ] ] = 1......
这样从1~100,只要b数组不是0的就按顺序输出,因为b数组下标的是a数组的数值,所以按顺序输出时即是按从小到大的顺序输出的。
从一开始,遇到第一个不为0的b [ 8 ]输出,再遇到b [ 15 ]输出,一直输到指定个数,上述例子是五个,即指定个数为5个,输满则结束输出。
复杂度
时间复杂度:O ( n )
空间复杂度:O ( n )
代码实现
#include<iostream>
using namespace std;
#define N 30000
int a[N];
int b[N];
// 哈希排序
void HaxiSort()
{
int n;
// 数组长度
cin >> n;
for (int i = 0; i < n; i++)
{
// b数组存放的作为a数组的下标
cin >> b[i];
a[b[i]] = 1;
}
for (int i = 0; i < N, n > 0; i++)
{
if (a[i] == 1)
{
cout << i << " ";
n--;
}
}
}
int main()
{
HaxiSort();
return 0;
}