插入排序

  • 基本思想

  插入排序是一种简单的排序算法,其基本思想是将第一个记录看成是一个有序子序列,再依次从第二个记录起逐个插入到这个有序的子序列中。一般来说,在第i步上,将R(i)插入到R(i)~R(i-1)构成的有序子序列。

  插入排序算法由嵌套的两个for循环组成,外层for循环n-1次,内层for循环比较复杂,循环次数依赖于第i个元素前关键字值比elem[i].key大的元素个数。

  • 复杂度分析

  在最坏的情况下,每个循环都必须移动到数组的最前面,即原数组元素是逆序。这时第一趟循环1次,第二趟循环2次,依次类推,总比较的次数为 n(n-1)/2=O(n2)。

  在最好的情况下,数组元素已经按关键字递增排序,这时每个内层循环到的元素都不需要移动,总的比较次数为n-1,所以此时的时间复杂度为O(n)。

  如果待排序元素是随机的,也就是排序的元素可能出现的概率是相同的,这时可取最坏情况和最好情况的平均值,平均时间复杂度为O(n2)

  • 代码实现
 1 public int[] sort1(int[] array) {
 2         // 直接插入排序
 3         for (int i = 1; i < array.length; i++) {
 4             int tmp = array[i];
 5             int j = i;
 6             while (tmp < array[j - 1]) {
 7                 array[j] = array[j - 1];
 8                 j--;
 9             }
10             array[j] = tmp;
11         }
12         return array;
13     }

 

posted @ 2019-05-31 23:59  wtwexile  阅读(130)  评论(0编辑  收藏  举报