首页 / 算法 / C#排序算法之快速排序
C#排序算法之快速排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#排序算法之快速排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2177字,纯文字阅读大概需要4分钟。
内容图文
![C#排序算法之快速排序](/upload/InfoBanner/zyjiaocheng/621/def43beae9194c3197989ba69cdd7c55.jpg)
快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
原理:
1.从数列中挑出一个元素,称为 “基准”(pivot);
2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;
static int[] QuickSort(int[] arr, int low, int high) { if (low < high) { int key = arr[low];//1.这里选arr[low]为基准数 var left = low; var right = high; while (left < right) //2. 分区操作,比基准数小的放左边,大的放右边 { //从序列右往左比较,比基准数小的拿出来,放到基准数的左边 while (left < right) { if (arr[right] < key) { arr[left] = arr[right]; break; } else { right--;//左移下一个数字进行比较 } } //从序列左往右比较,比基准数大的拿出来,放到基准数的右边 while (left < right) { if (arr[left] > key) { arr[right] = arr[left]; break; } else { left++;//右移下一个数字进行比较 } } } //2. 分区退出之后,基准数恰好位于中间位置 //跳出循环,现在left==right left是中间位置 arr[left] = key; //3.再次递归 QuickSort(arr, low, left - 1);//左边再次排序 QuickSort(arr, left + 1, high);//右边再次排序 } return arr; }
排序结果
static void Main(string[] args) { Console.WriteLine($"数据算法"); var arr1 = GetArrayData(8, 1, 22); Console.WriteLine($"生成未排序数据arr1:{ShowArray(arr1)}"); //var arr2 = BubbleSort(arr1); //Console.WriteLine($"冒泡排序:{ShowArray(arr2)}"); //var arr3 = SelectSort(arr1); //Console.WriteLine($"选择排序arr3:{ShowArray(arr3)}"); //var val = arr3[3]; //var arr4= InsertSort(arr1); //Console.WriteLine($"插入排序arr4:{ShowArray(arr4)}"); var arr5= QuickSort(arr1, 0, arr1.Length - 1); Console.WriteLine($"快速排序arr5:{ShowArray(arr5)}"); //var index= BinarySearch(arr3, 0, arr1.Length - 1,val); //Console.WriteLine($"{val}在 arr3中出现的索引位置是{index}"); //var val2 = arr3[4]; //var index2 = BinarySearch2(arr3, val2); //Console.WriteLine($"{val2}在 arr3中出现的索引位置是{index2}"); Console.ReadLine(); }
内容总结
以上是互联网集市为您收集整理的C#排序算法之快速排序全部内容,希望文章能够帮你解决C#排序算法之快速排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。