zoukankan      html  css  js  c++  java
  • 算法:插入排序(Insertion Sort)

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace DataStuctureStudy.Sorts
     8 {
     9     /// <summary>
    10     /// 将数组分为两部分:已排序部分和未排序部分,对数组执行一次遍历,将遍历中的
    11     /// 当前元素插入到已排序的部分。
    12     /// 初始状态已排序部分只包括一个元素。
    13     /// </summary>
    14     class InsertionSort<T>
    15         where T : IComparable<T>
    16     {
    17         private static void Swap(T[] items, int left, int right)
    18         {
    19             if (left != right)
    20             {
    21                 var temp = items[left];
    22                 items[left] = items[right];
    23                 items[right] = temp;
    24             }
    25         }
    26 
    27         public static void Sort(T[] items)
    28         {
    29             for (
    30                 var sortedRangeEndIndex = 1;
    31                 sortedRangeEndIndex < items.Length;
    32                 sortedRangeEndIndex++)
    33             {
    34                 if (items[sortedRangeEndIndex].CompareTo(items[sortedRangeEndIndex - 1]) < 0)
    35                 {
    36                     int insertIndex = FindInsertionIndex(items, items[sortedRangeEndIndex]);
    37                     Insert(items, sortedRangeEndIndex, insertIndex);
    38                 }
    39             }
    40         }
    41 
    42         private static int FindInsertionIndex(T[] items, T valueToInsert)
    43         {
    44             for (var i = 0; i < items.Length; i++)
    45             {
    46                 if (items[i].CompareTo(valueToInsert) > 0)
    47                 {
    48                     return i;
    49                 }
    50             }
    51 
    52             throw new InvalidOperationException();
    53         }
    54 
    55         private static void Insert(T[] items, int indexInsertingFrom, int indexInsertingAt)
    56         {
    57             var temp = items[indexInsertingFrom];
    58 
    59             for (var i = indexInsertingFrom; i > indexInsertingAt; i--)
    60             {
    61                 items[i] = items[i - 1];
    62             }
    63 
    64             items[indexInsertingAt] = temp;
    65         }
    66     }
    67 }
  • 相关阅读:
    Vim的行号、语法显示等设置,即.vimrc文件的配置
    Vim 配置详解
    经典SQL语句大全
    几种流行的AJAX框架jQuery,Mootools,Dojo,Ext JS的对比
    GHOST XP SP3无法安装IIS服务的解决方法
    开发中巧用Enum枚举类型
    代码的坏味道
    C#转义字符
    Dijit、ExtJS、jQuery UI 异同浅析
    未雨绸缪 Plan to Throw One Away
  • 原文地址:https://www.cnblogs.com/happyframework/p/3455757.html
Copyright © 2011-2022 走看看