直接插入排序

来源:互联网 发布:淘宝卖电影资源犯法 编辑:程序博客网 时间:2024/05/29 11:27

直接插入排序的算法思想:直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增 1 的有序表。

根据该思想,编写代码如下(从已有序列的第0个记录开始比较):

public static void insertSort1(int[] ele) {  for (int i = 1; i < ele.length; i++) {

   for (int j = 0; j < i; j++) {    if (ele[i] < ele[j]) {    //如果第i个元素小于第j个元素(也就是说第i个元素应该插入到第j个元素的位置)        int temp = ele[i];          for (int k=i-1; k>=j; k--) { //从滴j个元素到第i-1个元素全部后移一个位置      ele[k+1] = ele[k];     }     ele[j] = temp; //将第i个元素插入到第j个元素的位置上      break; //注意,如果没有这个break,则循环次数会多很多    }       }  }    //打印出排序后的结果  for (int i = 0; i < ele.length; i++) {   System.out.println(ele[i]);  }

 }

 

该算法看上去有三层循环嵌套,而实际上算法的复杂度是O(n^2),因为总的比较次数和移动(赋值)的次数加起来为n(n-1)/2.
另一种代码:
public static void insertSort(int[] elements) {  for (int i = 1; i < elements.length; i++) {   int j = -1;   // 找到element[i]应该摆放的位置,此处可以利用查找算法进行优化   while (j < i && elements[i] > elements[++j]);    // 将j之后的数据移动一位,然后把elements[i]移动到j处    int temp = elements[i];    for (int k = i - 1; k >= j; k--) {     elements[k + 1] = elements[k];    }    elements[j] = temp;  }  for (int i = 0; i < elements.length; i++) {   System.out.println(elements[i]);  } }

第二版的代码(从已有序列的最后一个开始比较):

public static void insertSort2(int[] r) {for (int i=0; i<r.length; i++) {int j = i-1;int temp = r[i];while (j>=0 && temp < r[j]) {r[j+1] = r[j];r[j] = temp;j--;}}for (int i=0; i<r.length; i++) {System.out.println(r[i]);}}


 

原创粉丝点击