算法-java代码实现计数排序


计数排序

第10节 计数排序练习题

对于一个int数组,请编写一个计数排序算法,对数组元素排序。

给定一个int数组A及数组的大小n,请返回排序后的数组。

测试样例:

[1,2,3,5,2,3],6
[1,2,2,3,3,5]

Java (javac 1.7)

代码自动补全

1

import java.util.*;

2


3

public class CountingSort {

4

    public int[] countingSort(int[] A, int n) {

5

        countingSort(A);

6

        return A;

7

    }

8


9

    public void countingSort(int[] arr) {

10

        int[] tempArr = new int[arr.length];// 临时数组

11

        int[] timesArr;// 统计每个元素出现的次数,放入到对应的桶中

12

        int range;// 统计这一组的范围,得出需要多少个桶

13

        int max = arr[0];

14

        int min = arr[0];

15

        for (int a : arr) {

16

            if (a > max)

17

                max = a;

18

            if (a < min)

19

                min = a;

20

        }

21

        range = max - min + 1;// 得出极值差,为了减小临时数组(统计各元素出现的次数)的长度

22

        timesArr = new int[range];

23


24

        for (int i = 0; i < arr.length; i++) {

25

            timesArr[arr[i] - min]++;

26

        }

27

        for (int i = 1; i < timesArr.length; i++) {// 得到所有元素的大小上的总体顺序

28

            timesArr[i] += timesArr[i - 1];

29

        }

30

        for (int i = 0; i < arr.length; i++) {// 将arr中元素的位置顺序对应到临时数组中

31

            int position = timesArr[arr[i] - min];// 得到arr[i]这个元素在整体上的位置

32

            tempArr[--position] = arr[i];// 根据上面的位置,将该元素放入到临时数组中

33

            timesArr[arr[i] - min]--;

34

        }

35

        for (int i = 0; i < arr.length; i++) {

36

            arr[i] = tempArr[i];

37

        }

38

    }

39

}

您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例

时间: 2024-10-16 16:58:12

算法-java代码实现计数排序的相关文章

算法-java代码实现希尔排序

希尔排序 第8节 希尔排序练习题 对于一个int数组,请编写一个希尔排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组.保证元素小于等于2000. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class ShellSort { 4 public int[] shellSort(int[] A, int n) { 5 int

排序算法的c++实现——计数排序

任何比较排序算法的时间复杂度的上限为O(NlogN), 不存在比o(nlgN)更少的比较排序算法.如果想要在时间复杂度上超过O(NlogN)的时间复杂度,肯定需要加入其它条件.计数排序就加入了限制条件,从而使时间复杂度为O(N). 计数排序的核心思想(来自算法导论):计数排序要求待排序的n个元素的大小在[0, k]之间,并且k与n在一个数量级上,即k=O(n).对于每一个输入元素x, 确定小于等于x的个数为i.利用这一信息,就可以把元素x放到输出数组的正确位置,即把元素x放到输出数组下标为i-1

十大排序算法 JAVA代码

冒泡排序 插入排序 选择排序 希尔排序 归并排序 快速排序 堆排序 计数排序 基数排序 桶排序  O是指计算机执行命令所需的时间 nlogn是算法的时间复杂度,一般排序用的是log2n 总体总结表:这个有个错误就是归并排序需要一个o(n)的辅助数组  冒泡排序 主要思想:外层循环从1到n-1,内循环从当前外层的元素的下一个位置开始,依次和外层的元素比较,出现逆序就交换. 特点:stable sort(稳定性排序).In-place sort(不占用额外的空间,只是交换元素) 最优复杂度:当输入数

常见排序&amp;查询算法Java代码实现

1. 排序算法代码实现 /** * ascending sort * 外层循环边界条件:总共需要冒泡的轮数--每一轮都将最大或最小的数冒泡到最后 * 内层循环边界条件:冒泡数字移动的边界--最终数字需冒泡到此处 * 时间复杂度:O(n^2) * @param arr */ public static void bubbleSort(int[] arr) { if (arr == null) { throw new RuntimeException("Input arr is null!"

算法-java代码实现基数排序

基数排序 第11节 基数排序练习题 对于一个int数组,请编写一个基数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组.保证元素均小于等于2000. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class RadixSort { 4 // 各位装通法 5 public int[] radixSort(int[] A, in

算法-java代码实现堆排序

堆排序 第7节 堆排序练习题 对于一个int数组,请编写一个堆排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class HeapSort { 4 public int[] heapSort(int[] A, int n) { 5 int lastIndex = n - 1;

[一周一算法]算法导论学习之计数排序

计数排序是一种线性时间的排序,同时也是一种非比较排序 代码如下: 1 void CountingSort(int *data, int k, int num) // A ~ data[], B ~ aimArray[], C ~ tempArray[] 2 { 3 int *aimArray = new int[num]; 4 int *tempArray = new int[k + 1]; 5 for (int i = 0; i <= k; i++) 6 tempArray[i] = 0; 7

常用算法Java实现之希尔排序

希尔排序严格来说是基于插入排序的思想,又被称为缩小增量排序. 具体流程如下: 1.将包含n个元素的数组,分成n/2个数组序列,第一个数据和第n/2+1个数据为一对... 2.对每对数据进行比较和交换,排好顺序: 3.然后分成n/4个数组序列,再次排序: 4.不断重复以上过程,随着序列减少并直至为1,排序完成. 假如有初始数据:25  11  45  26  12  78. 1.第一轮排序,将该数组分成 6/2=3 个数组序列,第1个数据和第4个数据为一对,第2个数据和第5个数据为一对,第3个数据

【数据结构】非比较排序的算法实现(包括计数排序、计数排序)

计数排序: #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; #include<assert.h> #include<vector> void Print(vector<int>  a) {     for (int i = 0; i < a.size(); i++)     {         cout << a[i] << &q