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

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace InsertAlgorithm
    {
        class Program
        {
            static int[] num = new int[10];
            static void Main(string[] args)
            {
                InitData();
                num=Sort(num);
                ShowArrayValues(num);
                Console.WriteLine("
    插入数据:");
                int x=int.Parse(Console.ReadLine());
                DirectlyInsert(num, x);
                DichotomyInsertSort(num, x);
                Console.ReadKey();
            }
            //自动生成测试数据
            static void InitData()
            {
                for (int i = 0; i < num.Length; i++)
                {
    
                    var Seed = Guid.NewGuid().GetHashCode();
                    var value = new Random(Seed);
                    num[i] = value.Next(1, 100);
                }
            }
            /// <summary>
            /// 直接插入排序
            /// </summary>
            static void DirectlyInsert(int[] num,int target)
            {
                int[] endArray = new int[num.Length + 1];
                endArray[0] = target;
                for (int i = 1; i < endArray.Length; i++)
                {
                    endArray[i] = num[i - 1];
                }
                for (int i = 0; i < endArray.Length-1; i++)
                {
                    if(endArray[i]>endArray[i+1])
                    {
                        int temp = endArray[i];
                        endArray[i] = endArray[i+1];            
                        endArray[i + 1] = temp;
                    }
                    else
                    {
                        break;
                    }
                }
                Console.WriteLine("直接插入排序:");
                ShowArrayValues(endArray);
            }
           
            /// <summary>
            /// 折半插入排序(二分插入排序)
            /// </summary>
            static void DichotomyInsertSort(int[] num, int target)
            {
                //将原数组复制一遍,新数组首位是欲插入值,后面是endArray[i+1]=num[i]
                int[] endArray =new int[num.Length+1]; 
                for (int i = 0; i < num.Length; i++)
                {
                    endArray[i+1] = num[i];
                }
                endArray[0] = target;
                Console.WriteLine("
    二分插入排序:");     
                int low = 1, mid, high = num.Length;
                int index = 0;
                //1.当目标值位于最小值与最大值中间
                //2.当目标值小于最小值
                //3.当目标值大于最小值
                while(low<=high)
                {
                    mid=low+((high-low)/2);
                    if (endArray[low] <= target && endArray[mid] >= target)
                    {
                        high = mid;
                    }
                    else if (endArray[mid] < target && endArray[high] >= target)
                    {
                        low = mid;
                    }
                    else if (endArray[low] > target)
                    {
                        index = low - 1;
                        break;
                    }
                    else if (endArray[high] < target)
                    {
                        index = high;
                        break;
                    }
                    if (low + 1 == high)
                    {
                        index = low;
                        break;
                    }
                }
                //左边左移
                for (int i = 0; i <index; i++)
                {
                    endArray[i ] = endArray[i+ 1];
                }
                endArray[index] = target;
                ShowArrayValues(endArray);
               // int low=0, mid, high=num;
            }
            /// <summary>
            /// 显示数组的数据
            /// </summary>
            /// <param name="values"></param>
            static void ShowArrayValues(int[] values)
            {
                foreach (int item in values)
                {
                    Console.Write(item + " ");
                }
            }
    
            /// <summary>
            /// 从小到大排序
            /// </summary>
            /// <param name="i"></param>
            /// <returns></returns>
            private static int[] Sort(int[] i)
            {
                List<int> list = i.ToList();
                list.Sort();
                i= list.ToArray<int>();
                return i;
            }
        }
    }
  • 相关阅读:
    Android读写SD卡
    如何用c语言调用c++做成的动态链接库
    css3 翻转和旋转的区别
    若干道Swift面试题
    可控制导航下拉方向的jQuery下拉菜单代码
    Mysql主从备份和SQL语句的备份
    .net 读书笔记
    .NET框架体系结构
    原则干货存起来
    【转】php和java之间rsa加密互通
  • 原文地址:https://www.cnblogs.com/lichuangblog/p/8858292.html
Copyright © 2011-2022 走看看