插入排序
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("\n插入数据:"); 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("\n二分插入排序:"); 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; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!