数据结构java版之冒泡排序及优化
冒泡排序的时间用大O表示法是O(N^2).
传统的冒泡排序:
/** * @param total 要排序的数组长度 */ public void sort(int total){ int num[]; if(total <= 0){ System.out.println("请输入大于0的正整数"); }else{ num = new int[total]; for (int i = 0 ; i < total; i++){ //生成随机1到100之间的数 Random ra =new Random(); num[i] = ra.nextInt(100)+1; } System.out.println("要排序的数组为:" + Arrays.toString(num)); int sum = 0; int out,in; for (out = total - 1; out > 1; out--){ for (in = 0 ; in < out; in++){ sum ++; if(num[in] > num[in+1]){ int temp = num[in]; num[in] = num[in+1]; num[in+1] = temp; } } } // 最原始的冒泡排序 for(int i = 0; i < total -1 ; i ++){ for (int j = 0 ; j < total -1 ; j++){ sum ++; if(num[j] > num[j+1]){ int temp = num[j]; num[j] = num[j+1]; num[j+1] = temp; } } } System.out.println("排序完成的数组为:" + Arrays.toString(num)); System.out.println("总共用次数:" + sum); } }
优化过后的冒泡排序:
/** * @param total 要排序的数组长度 */ public void sort(int total){ int num[]; if(total <= 0){ System.out.println("请输入大于0的正整数"); }else{ num = new int[total]; for (int i = 0 ; i < total; i++){ //生成随机1到100之间的数 Random ra =new Random(); num[i] = ra.nextInt(100)+1; } System.out.println("要排序的数组为:" + Arrays.toString(num)); /**核心算法: * 双重循环,外层循环用于控制排多少次序。 * 内层循环从第一位开始一直往后比较,内层循环一次后,可以将最大的数至于末尾。 * 外层循环让内层循环继续排没有排序过的数组,排序过的不用再排。 */ int sum = 0; int out,in; for (out = total - 1; out > 1; out--){ for (in = 0 ; in < out; in++){ sum ++; if(num[in] > num[in+1]){ int temp = num[in]; num[in] = num[in+1]; num[in+1] = temp; } } } System.out.println("排序完成的数组为:" + Arrays.toString(num)); System.out.println("总共用次数:" + sum); } }
大家对比可以发现,就是外层循环的时候有点变化,其他的代码都是一模一样的。
那么优化后的算法能快多少呢。我们都以数组长度为10来计算:
传统冒泡排序:9x9=81步,
优化后的冒泡排序:9+8+7+6+5+4+3+2=44步。
因为优化后的冒泡排序,每排完一次,最后一个数已经是最大的,就不需要再比较了。
相关推荐
风吹夏天 2020-07-07
hang0 2020-08-16
小海 2020-06-25
清溪算法君老号 2020-06-06
wonner 2020-06-03
清溪算法君老号 2020-06-01
RememberMePlease 2020-05-01
清溪算法君老号 2020-04-25
rein0 2020-04-21
rein0 2020-04-18
qingsongzdq 2020-03-03
wonner 2020-02-25
horizonheart 2020-02-23
baike 2020-02-16
# 第三题:使用python实现冒泡排序def BubbleSort: long = len for i in range: for j in range: if list[i] < list[j]:
GhostLWB 2020-01-11
singer 2020-01-08
蜗牛慢爬的李成广 2020-01-04