计数排序 系统管理员 2022-06-09 01:36 307阅读 0赞 对于一个int数组,请编写一个计数排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。 # 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 我的提交 # -*- coding:utf-8 -*- class CountingSort: def countingSort(self, A, n): # write code here seta = set(A) minnum = min(seta) maxnum = max(seta) buckets = {} for i in range(minnum, maxnum+1): buckets[i] = 0 for num in range(n): buckets[A[num]] = buckets[A[num]] + 1 B = [] for j in range(minnum, maxnum+1): B.extend([j] * buckets[j]) return B if __name__ == '__main__': c = CountingSort() print(c.countingSort([54,35,48,36,27,12,44,44,8,14,26,17,28],13)) 调整一下,减少空间消耗 # -*- coding:utf-8 -*- class CountingSort: def countingSort(self, A, n): # write code here seta = set(A) minnum = min(seta) maxnum = max(seta) buckets = {} for i in range(minnum, maxnum+1): buckets[i] = 0 for num in range(n): buckets[A[num]] = buckets[A[num]] + 1 i = 0 for j in range(minnum, maxnum+1): for _ in range(buckets[j]): A[i] = j i += 1 return A if __name__ == '__main__': c = CountingSort() print(c.countingSort([54,35,48,36,27,12,44,44,8,14,26,17,28],13)) **参考答案** public class CountSort { public static void countSort(int[] arr) { if (arr == null || arr.length < 2) { return; } int min = arr[0]; int max = arr[0]; for (int i = 1; i < arr.length; i++) { min = Math.min(arr[i], min); max = Math.max(arr[i], max); } int[] countArr = new int[max - min + 1]; for (int i = 0; i < arr.length; i++) { countArr[arr[i] - min]++; } int index = 0; for (int i = 0; i < countArr.length; i++) { while (countArr[i]-- > 0) { arr[index++] = i + min; } } } public static void swap(int[] arr, int index1, int index2) { int tmp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = tmp; } public static int[] generateArray(int len, int range) { if (len < 1) { return null; } int[] arr = new int[len]; for (int i = 0; i < len; i++) { arr[i] = (int) (Math.random() * range); } return arr; } public static void printArray(int[] arr) { if (arr == null || arr.length == 0) { return; } for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } System.out.println(); } public static boolean isSorted(int[] arr) { if (arr == null || arr.length < 2) { return true; } for (int i = 1; i < arr.length; i++) { if (arr[i - 1] > arr[i]) { return false; } } return true; } public static void main(String[] args) { int len = 10; int range = 10; int testTimes = 50000; for (int i = 0; i < testTimes; i++) { int[] arr = generateArray(len, range); countSort(arr); if (!isSorted(arr)) { System.out.println("Wrong Case:"); printArray(arr); break; } } int len2 = 13; int range2 = 10; int testTimes2 = 50000; for (int i = 0; i < testTimes2; i++) { int[] arr = generateArray(len2, range2); countSort(arr); if (!isSorted(arr)) { System.out.println("Wrong Case:"); printArray(arr); break; } } } }
相关 计数排序 数排序是非比较排序,桶排序的一种 时间复杂度:O(n),空间复杂度O(n) ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_1... 一时失言乱红尘/ 2024年04月18日 08:20/ 0 赞/ 149 阅读
相关 计数排序 计数排序 冒泡、选择、插入、归并、快速、希尔、堆排序,都是基于比较的排序,平均时间复杂度最低是O(nlogn)。 计数排序、桶排序、基数排序,都不是基于比较的排序,它们 痛定思痛。/ 2023年02月20日 10:43/ 0 赞/ 56 阅读
相关 排序算法——计数排序 排序算法——计数排序 > 计数排序是一个非基于比较的排序算法。它的优势在于在对一定范围内的整数排序时,快于任何比较排序算法。 这是一种牺牲空间换取时间的做法,当O(k)> 绝地灬酷狼/ 2022年12月23日 06:57/ 0 赞/ 371 阅读
相关 【排序】计数排序 为什么记录这个 在做 [leetcode 561 题][leetcode 561]的时候,第三种解法,看了很久才明白,后来理解实际上是做了一次计数排序。 这个题,直接看 缺乏、安全感/ 2022年11月20日 02:00/ 0 赞/ 297 阅读
相关 计数排序 转载自:[http://www.cnblogs.com/eaglet/archive/2010/09/16/1828016.html][http_www.cnblogs.com Bertha 。/ 2022年08月11日 08:00/ 0 赞/ 282 阅读
相关 计数排序 计数排序,他的主要目的是对整数排序并且会比普通的排序算法性能更好。 1. 初始化一个计数数组,大小是输入数组中的最大的数。 2. 遍历输入数组,遇到一个数 布满荆棘的人生/ 2022年07月14日 01:26/ 0 赞/ 315 阅读
相关 计数排序 对于一个int数组,请编写一个计数排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例: [1,2,3,5,2, 系统管理员/ 2022年06月09日 01:36/ 0 赞/ 308 阅读
相关 计数排序 计数排序 算法描述:是一种通过计数来达到排序的方法。 ![20180326152550965][] 1.选出数组的最大值k,创建一个k+1长度的数组coun 素颜马尾好姑娘i/ 2022年05月28日 00:20/ 0 赞/ 326 阅读
相关 计数排序 / 计数排序:统计小于等于该元素值的元素的个数i,于是该元素就放在目标数组的索引i位(i≥0)。 计数排序基于一个假设,待排序数列的 ゝ一纸荒年。/ 2021年12月18日 05:07/ 0 赞/ 398 阅读
相关 计数排序 计数排序: 假设n个输入元素中的每一个都是在0~区间内的一个整数,其中k为某个整数。当k=O(n)是,排序时间为O(n). 基本思想:对每个输入元素x,确定小于x元素的 淡淡的烟草味﹌/ 2021年09月23日 03:22/ 0 赞/ 515 阅读
还没有评论,来说两句吧...