• 基础知识(04) -- 插入排序


    插入排序是基于比较的排序,所谓的基于比较,就是通过比较数组中的元素,看谁大谁小,根据结果来调整元素的位置。
    因此,对于这类排序,就有两种基本的操作: 1.比较操作 2.交换操作 ;其中对于交换操作,可以优化成移动操作,即不直接进行两个元素的交换,而是用一个中间值(temp)将当前元素保存起来,然后执行移动操作,待确定了最终位置后,再将当前元素放入合适的位置。

    基本思路
      插入排序算法有种递归的思想在里面,它由N-1趟排序组成。
      初始时,只考虑数组下标0处的元素,只有一个元素,显然是有序的。
      然后第一趟,对下标1处的元素进行排序,保证数组[0][1]位置上的元素有序。
      然后第二趟,对下标2处的元素进行排序,保证数组[0][1][2]位置上的元素有序。
      ....
      ....
      第N-1趟,对下标N-1处的元素进行排序,保证数组[0,N-1]上的元素有序,也就是整个数组有序了。
      它的递归思想就体现在: 当对位置i处的元素进行排序时,[0,i-1]上的元素一定是已经有序的了。

    效率: 比较和交换次数都为O(N的平方),大致为N*(N-1)/4,所以这个算法比冒泡大致快了一倍,比选择排序略快,尤其是部分数据已经局部有序的情况下,这个算法效率会更高。

     1 /**
     2  * 演示插入法排序
     3  * @author Administrator
     4  *
     5  */
     6 public class InsertSort {
     7     public void insertSort(int[] arrays){
     8         int j = 0;
     9         
    10         for(int i = 1;i < arrays.length;i++){
    11             int temp = arrays[i];
    12             
    13             for(j = i; j > 0;j--){
    14                 if(arrays[j-1] >= temp){
    15                     arrays[j] = arrays[j-1];
    16                 }else{
    17                     break;
    18                 }
    19             }
    20             arrays[j] = temp;
    21         }
    22     }
    23     
    24     public static void main(String[] args) {
    25         InsertSort is = new InsertSort();
    26         int[] arrays = {5,2,8,1,4,9,7};
    27         is.insertSort(arrays);
    28         
    29         for(int num : arrays){
    30             System.out.print(num + " ");
    31         }
    32     }
    33 }
  • 相关阅读:
    css小随笔
    正则表达式的疑问
    笔记本各型号CPU性能比较
    调整Ajax的ValidatorCalloutExtender绑定后的提示字体
    GridView显示空表头
    VB.net检测输入内容
    asp.net中System.DateTime.Now.ToString()的一些用法
    收藏的手机论坛
    常用或者将要用的技巧或代码(网摘)
    使用Ajax的MaskedEditExtender来限制输入内容
  • 原文地址:https://www.cnblogs.com/xinhuaxuan/p/6240763.html
Copyright © 2020-2023  润新知