博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#常用的排序算法
阅读量:6273 次
发布时间:2019-06-22

本文共 4861 字,大约阅读时间需要 16 分钟。

//快速排序递归算法

1   static void Main(string[] args) 2         { 3             int[] arr = { 24,3,5,65,9}; 4             Sort(arr); 5             for (int i = 0; i < arr.Length;i++ ) { 6                 Console.WriteLine(arr[i]); 7             } 8             Console.ReadKey(); 9         }10         /// 11         /// 快速排序12         /// 13         /// 14         public static void Sort(int[] numbers)15         {16             QuickSort(numbers, 0, numbers.Length - 1);17         }18         /// 19         /// 快速排序主要逻辑20         /// 21         /// 排序所需的数组22         /// 数组的起始下标23         /// 数组的末尾下标24         private static void QuickSort(int[] numbers, int left, int right)25         {26             if (left < right)27             {28                 int middle = numbers[(left + right) / 2];//找到中间值29                 int i = left - 1;30                 int j = right + 1;31                 while (true)32                 {33                     while (numbers[++i] < middle) ;//判断左边数组数据与中间数组大小34                     while (numbers[--j] > middle) ;//判断右边数据与中间数组大小35                     if (i >= j)36                         break;37                     Swap(numbers, i, j);//交换位置38                 }39                 QuickSort(numbers, left, i - 1);//使用递归左排序40                 QuickSort(numbers, j + 1, right);//使用递归右排序41             }42         }43         /// 44         /// 对应下标数据交换位置45         /// 46         /// 排序数组47         /// 数组下标48         /// 数组下标49         private static void Swap(int[] numbers, int i, int j)50         {51             int number = numbers[i];52             numbers[i] = numbers[j];53             numbers[j] = number;54         }

//插入排序

static void Main(string[] args)        {            int[] arr = { 24, 3, 5, 65, 9 };            InsertSort(arr);            for (int i = 0; i < arr.Length;i++ ) {              Console.WriteLine(arr[i]);            }            Console.ReadKey();        }        ///         /// 插入排序        ///         /// 需要排序的数组         private static void InsertSort(int[] arr)        {            int j = 0;//定义一个随机变化的下标            for (int i = 1; i < arr.Length; i++)            {                int temp=arr[i];//取出数组的一组数据                j=i-1;                while (j >= 0 && temp < arr[j])//同时满足俩个条件执行                {                    arr[j + 1] = arr[j];//条件符合插入数据,反复执行直到超出索引范围                    j--;                }                arr[j + 1] = temp;//将取出的数据放在最后一次调换数据的位置            }        }

//二分法查找算法

1         static void Main(string[] args) 2         { 3             int[] arr = { 2, 3, 5, 6, 9 }; 4             int index=BinarySearch(arr, 6); 5             Console.WriteLine(index); 6             Console.ReadKey(); 7         } 8         ///  9         /// 二分法查找算法(要查找的数组为以排好序的数组)10         /// 11         /// 以排好序的数组12         /// 需要查找的数13         /// 
14 private static int BinarySearch(int[] arr, int number)15 {16 int left = 0;//定义数组的最左端下标17 int right = arr.Length - 1;//定义数组最右端下标18 while (left < right)//当最左端下标大于右端下表时退出循环19 {20 int middle = (left + right) / 2;//获取数组中间值21 if (number == arr[middle])//判断查找的数是否为中间值22 {23 return middle;24 }25 else if (number < arr[middle])26 {27 right = middle-1;//判断查找值是否在中间值的左侧,如果是则将查找的左边下标改为中间值下标前一位28 }29 else30 {31 left = middle+1;//如果不是,则查找的数在中间值右侧,需更改左边下标为中间值后一位32 }33 }34 return -1;35 }

//选择排序

static void Main(string[] args)        {            int[] arr = { 24, 3, 15, 6, 19 };            SelectSort(arr);            for(int i=0;i
/// 选择排序 /// ///
要排序的数组 private static void SelectSort(int[] arr) { int temp = 0; for (int i = 0; i < arr.Length - 1; i++) { int minVal = arr[i]; //假设 i 下标就是最小的数 int minIndex = i; //记录我认为最小的数的下标 for (int j = i + 1; j < arr.Length; j++) //这里只是找出这一趟最小的数值并记录下它的下标 { //说明我们认为的最小值,不是最小 if (minVal > arr[j]) //这里大于号是升序(大于是找出最小值) 小于是降序(小于是找出最大值) { minVal = arr[j]; //更新这趟最小(或最大)的值 (上面要拿这个数来跟后面的数继续做比较) minIndex = j; //记下它的下标 } } //最后把最小的数与第一的位置交换 temp = arr[i]; //把第一个原先认为是最小值的数,临时保存起来 arr[i] = arr[minIndex]; //把最终我们找到的最小值赋给这一趟的比较的第一个位置 arr[minIndex] = temp; //把原先保存好临时数值放回这个数组的空地方, 保证数组的完整性 } }

 

站在巨人的肩膀上真的会看的更远更清晰!

                           -----用志不分,乃凝于神

转载于:https://www.cnblogs.com/xiong950413/p/9778827.html

你可能感兴趣的文章
重叠(Overlapped)IO模型
查看>>
ffmpeg study 1
查看>>
Git使用教程
查看>>
使用shell脚本自动监控后台进程,并能自动重启
查看>>
Flex&Bison手册
查看>>
MySQL 5.6 for Windows 解压缩版配置安装
查看>>
solrCloud+tomcat+zookeeper集群配置
查看>>
/etc/fstab,/etc/mtab,和 /proc/mounts
查看>>
Apache kafka 简介
查看>>
socket通信Demo
查看>>
技术人员的焦虑
查看>>
js 判断整数
查看>>
建设网站应该考虑哪些因素
查看>>
mongodb $exists
查看>>
js实现页面跳转的几种方式
查看>>
sbt笔记一 hello-sbt
查看>>
常用链接
查看>>
pitfall override private method
查看>>
!important 和 * ----hack
查看>>
聊天界面图文混排
查看>>