zoukankan      html  css  js  c++  java
  • 直接插入排序

    直接插入排序应用了插入排序的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。

    直接插入排序算法的基本思想:

      在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。

    1.简单方法
         首先在当前有序区arr[0..i-1]中查找arr[i]的正确插入位置j(0≤j≤i-1);然后将arr[j..i-1]中的记录均后移一个位置,腾出j位置上的空间插入arr[i]。
      注意:
         若arr[i]的关键字大于等于arr[0..i-1]中所有记录的关键字,arr[i]就是插入原位置。
    2.改进的方法
      一种查找比较操作和记录移动操作交替地进行的方法。
    具体做法:
         将待插入记录arr[i]的关键字从右向左依次与有序区中记录arr[j](j=i-1,i-2,…,0)的关键字进行比较:
         ① 若arr[j]的关键字大于arr[i]的关键字,则将arr[j]后移一个位置;
            ② 若arr[j]的关键字小于或等于R[i]的关键字,则查找过程结束,j+1即为arr[i]的插入位置。

     1 package com.bingoogol.algorithm.sort;
     2 
     3 /**
     4  * 直接插入排序
     5  * 
     6  * @author bingoogol@sina.com
     7  */
     8 public class InsertSort {
     9 
    10     public static void main(String[] args) {
    11         int[] arr = new int[] { 2, 6, 30, 25, 9, 18, 13 };
    12         System.out.print("排序前:");
    13         InsertSort.printArr(arr);
    14         InsertSort.sort(arr);
    15         System.out.print("排序后:");
    16         InsertSort.printArr(arr);
    17     }
    18 
    19     public static void sort(int[] arr) {
    20         for (int i = 1; i < arr.length; i++) {
    21             int temp = arr[i];
    22             int j = i - 1;
    23             while (j >= 0 && arr[j] > temp) {
    24                 arr[j + 1] = arr[j];
    25                 j--;
    26             }
    27             arr[j + 1] = temp;
    28         }
    29     }
    30 
    31     public static void swap(int[] data, int i, int j) {
    32         int temp = data[i];
    33         data[i] = data[j];
    34         data[j] = temp;
    35     }
    36 
    37     public static void printArr(int[] arr) {
    38         for (int i = 0; i < arr.length - 1; i++) {
    39             System.out.print(arr[i] + ",");
    40         }
    41         System.out.println(arr[arr.length - 1]);
    42     }
    43 }
    查看Java语言版代码
  • 相关阅读:
    PowerShell Arrays
    PowerShell Hashtable
    PowerShell Variables
    MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
    神奇的Timer
    神奇的Timer之lock篇
    利用lambda表达式正确关闭WCF连接
    Zendstutio设置
    一个服务器部署多个项目
    Magento模块配置文件
  • 原文地址:https://www.cnblogs.com/bingoogol/p/sort-insert.html
Copyright © 2011-2022 走看看