哈希排序

哈希排序应该要和希尔排序区分开来,哈希排序的思想很简单的,典型的以空间换取时间的排序算法,其时间复杂度可以做到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;
} 

这种算法也经常用来去重复,但是对于某些刁钻的数据也不太好用。

发布了44 篇原创文章 · 获赞 72 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/cj151525/article/details/100182177