赞
踩
我们都知道希尔排序是插入排序的优化。
希尔排序会在进行插入排序前把数列分组,然后会根据需要把数组内部的数字先进行顺序排列,最终减少插入排序时移动元素的次数,达到优化的目的。
但是我这边简化了部分插入排序的代码,结果在最后测试的时候,插入排序竟然会比希尔排序要快。这里似乎是说希尔排序的代码还能再继续优化?或者还有别的原因?这里我只能把该问题记录了。希望能有大神能给我解答。下面贴出代码。
- //插入排序
- public static int[] insertionSort(int[] a){
- for (int i = 1;i < a.length;i++) {
- int zeroLine =a[i];//此处单独放出来因为这是参照的基准线。
- for (int j=i-1;j>=0&&a[j]>zeroLine;j--){
- a[i]=a[j];
- a[j]=zeroLine;
- }
- }
- return a;
- }
- //希尔排序
- //这种是设哨兵的希尔排序,已经比不设哨兵的希尔排序移动次数要少,速度更快很多倍了,但是还是比
- //上面的插入排序要慢。
- public static int[] shellSort1(int[] data) {
- int j=0;
- int temp = 0;
- for (int increment = data.length / 2; increment > 0; increment /= 2) {
- for (int i = increment; i < data.length; i++) {
- temp = data[i];
- for (j = i; j >= increment; j -= increment) {
- if(temp < data[j - increment]){//如想从小到大排只需修改这里
- data[j] = data[j - increment];
- }else{
- break;
- }
- }
- data[j] = temp;
- }
- }
- return data;
- }

- //建立随机数组的方法。
- public static int[] random(int n , int begin , int end){
-
- if(begin > end ){
- throw new IllegalArgumentException("begin need more end");
- }
-
- //创建指定长度的数组
- int[] nums = new int[n];
-
- //为数组赋值
- for (int i = 0; i < n; i++) {
- nums[i] = (int)((Math.random()*(end - begin +1)) + begin);
- }
-
- return nums;
- }

请神请神,我这边后面确实没时间研究这个,希望能有大神给我解答。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。