zoukankan      html  css  js  c++  java
  • 基础知识(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 }
  • 相关阅读:
    python爬取图片
    TensorFlow学习系列(四):minist实例--卷积神经网络
    TensorFlow学习系列(四):minist实例--用简单的神经网络训练和测试
    TensorFlow学习系列(三):实例数据下载和读取
    TensorFlow学习系列(二):入门起步
    TensorFlow学习系列(一):安装调试
    Anaconda安装
    screen的安装和使用
    YII 使用mysql语句查询
    YII 返回值为JSON格式
  • 原文地址:https://www.cnblogs.com/xinhuaxuan/p/6240763.html
Copyright © 2011-2022 走看看