失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 频率法:数组排序的另一种思路

频率法:数组排序的另一种思路

时间:2020-06-07 08:38:27

相关推荐

频率法:数组排序的另一种思路

通常要排序一个数组免不了要“比较”:比较arr[i]和arr[i+1]的大小关系并判断是否交换;这里我要介绍一种不通过比较数组元素来实现排序的新思路:频率法

为了突出频率法和普通方法的区别,我将贴出普通数组排序方法和频率法两者的代码,首先是普通方法(简单的选择排序,基于Java实现)

void sort(int[] arr){ for(int i=0; i<arr.length-1; i++){ for(int j=i; j<arr.length; j++){ if(arr[i]>arr[j]){ int tmp=arr[i]; arr[i]=arr[j]; arr[j]=tmp; } } } }

很简单的代码,现在是见证奇迹的时刻——频率法不需要比较arr[i]和arr[i+1]:

void sort(int[] arr){ int[] frqs=new int[max(arr)+1]; for(int i=0; i<arr.length; i++){ for(int j=0; i<=max(arr); j++){ if(arr[i]==j){ frqs[j]++; } } } int k=0; for(int i=0; i<frqs.length; i++){ for(int j=0; j<frqs[i]; j++){ arr[k]=i; k++; } } }

说明1:上述代码的max函数省略了,就是返回该数组的最大值

说明2:不同语言实现不同,但是思路是一样的;如Python在第二个for循环只需要一层,直接print i * frqs[i]

频率法的思路是:“占位”,即首先不管待排序数组有哪些数字,创建一个下标从0~max的数组用来存放这些数(以及这些数之间的数),用for循环遍历得到各个数字的出现频率,并把值存放在frqs数组中;巧妙之处在于,下标就是顺序,对应数组元素中存放的值就是出现次数

如果觉得《频率法:数组排序的另一种思路》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。