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 }
  • 相关阅读:
    AOP面向切面编程基础
    记第一次年会主持
    Tomcat服务器部署JavaWeb项目War包基本步骤
    VM14无法将网络更改为桥接状态:没有未桥接的主机网络适配器
    Ubuntu 16.04 安装 IDEA
    Linux之文件挂载
    图片大小
    打开文件、
    Setup Factory
    Repeater获取某一行TextBox值
  • 原文地址:https://www.cnblogs.com/happyframework/p/3455757.html
Copyright © 2011-2022 走看看