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 }
  • 相关阅读:
    Java面试题 OOAD & UML+XML+SQL+JDBC & Hibernate
    Java面试题 corejava(二)
    Java面试题 corejava(一)
    Java 笔试题(一)
    大数据离线分析平台 用户数据Etl
    Spfa【p1186】 玛丽卡
    牛客nowcoder Noip提高组第四场
    分层图【p4568】 [JLOI2011]飞行路线
    10.06 国庆节第九场模拟赛
    10.04 国庆节第七场模拟赛
  • 原文地址:https://www.cnblogs.com/happyframework/p/3455757.html
Copyright © 2011-2022 走看看