哈希排序应该要和希尔排序区分开来,哈希排序的思想很简单的,典型的以空间换取时间的排序算法,其时间复杂度可以做到O(n)。简单来说就是打表,用数组下标来对应数值,用值来记录个数。具体实现看下面例子:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[]={3,8,67,45,11,0,34,67,23,8} ;
int arr[100];//注意开辟的数组大小要超过排序数字的最大值
memset(arr,0,sizeof(arr));
for(int i=0;i<10;i++)
arr[a[i]]++;
for(int i=0;i<100;i++)
{
while(arr[i]--)
{
cout<<i<<" ";
}
}
return 0;
}
注意:开辟的数组下标最大要大于排序数字;
其实负数也能够排序,比如你看:
#include<bits/stdc++.h>
using namespace std;
const int maxs = 200;
int main()
{
int a[]={3,-8,-67,45,11,0,34,-67,23,-8} ;
int arr[maxs];//注意开辟的数组大小要超过排序数字的最大值
memset(arr,0,sizeof(arr));
for(int i=0;i<10;i++)
arr[100+a[i]]++; //注意加的数要够,不能让下标为负数,也不能超过数组最大小标
for(int i=0;i<maxs;i++)
{
while(arr[i]--)
{
cout<<i-100<<" ";
}
}
return 0;
}
这种算法也经常用来去重复,但是对于某些刁钻的数据也不太好用。