C#实现快速排序(通俗易懂)
快速排序算法应用
- 快排原理
- 快排具体案例的使用(C#实现)
快排原理
快排的核心思想是分治,从一组数组中,选择第一个数作为基数,然后从后往前遍历并和该基数做比较,若基数比该数大,则基数和该数交换位置,此时该数作为新的基数,开始从前往后遍历,若遇到比基数小的数,则该数和基数交换位置,此时该数成为新的基数,开始从后往前遍历,重复以上操作,最后会得到数组中小于一开始的那个基数的数全部在左边,大于的全部在右边,接着,递归处理左边部分的数组和右边部分的数组。
如下表格中,第一个数3为基数,则将3拿去从后往前做比较
3 | 2 | 1 | 8 | 5 |
3比1大,则3与1交换位置
1 | 2 | 3 | 8 | 5 |
此时拿1去从前往后做比较,均大于1,即一开始的那个基数3的左边均小于他,右边均大于他,则左边和右边分别为如下表格所示
1 | 2 |
8 | 5 |
重复上述遍历比较操作后,得
1 | 2 |
5 | 8 |
则该组数组的排序为
1 | 2 | 3 | 5 | 8 |
快排具体案例的使用(C#实现)
例题:已知有一个排序好的数组,此时再给你一个新的数字,写一个方法有序插入数字到数组中,效率越高越好。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Sort
{class Program{//自由输入一组数组static void Main(string[] args){int[] arr;Console.WriteLine("请输入数组的长度:");int length = Convert.ToInt32(Console.ReadLine());//Console.ReadLine() 会等待直到用户按下回车,一次读入一行//Convert.ToInt32()将数字的指定字符串表示形式转换为等效的 32 位有符号整数arr = new int[length];for (int i = 0; i < length; i++){Console.WriteLine("请输入第{0}个数:", i + 1);arr[i] = Convert.ToInt32(Console.ReadLine());}int min = 0;int max = arr.Length - 1;sort(arr, min, max);foreach (int i in arr){Console.WriteLine(i);}Console.ReadKey();//Console.ReadKey(); 则是等待用户按下任意键,一次读入一个字符。}public static void sort(int[] array, int min, int max){int key = array[min]; //数组的首位作为基数int start = min; //从前往后遍历标识位int end = max; //从后往前遍历标识位//两个标识位还未相遇,即基数的左边还未全小于基数,右边还未全大于基数while (end > start){ //从后往前遍历没有遇到比基数大的while (end > start && array[end] >= key){end--;}//当遇到比基数大时,互相交换位置if (key > array[end]){int temp = array[end]; array[end] = array[start];array[start] = temp;}//从前往后遍历,没有比新基数小的数while (end > start && array[start] <= key){start++;}//当遇到比新基数小时,互相交换位置if (key < array[start]){int temp = array[start];array[start] = array[end];array[end] = temp;}}//此时基数的左边全小于基数,右边全大于基数,利用递归思路//排序左边部分if (start > min){sort(array, min, start - 1);}//排序右边部分if (end < max){sort(array, end + 1, max);}}}
}
C#实现快速排序(通俗易懂)相关推荐
- Python3实现快速排序 通俗易懂
Python3实现快速排序 快速排序 是一种交换排序,属于分治算法. 思路: 对于要排序的元素集合,指定集合的第一个元素为基准点,通过一系列的扫描和交换(见下面的代码),让基准点左边的元素比基准点小, ...
- 图解快速排序——通俗易懂(quick sort)
文章目录 :fire:快速排序 :book: 1.图解算法 :book: 2.算法代码 :book: 3.例题 :book: 4.时空复杂度分析
- 【数据结构】对快速排序原理的理解(图解,通俗易懂)
学习数据结构时,书本上直接给出了快速排序的过程以及代码,对其原理解释的不够详细,琢磨代码后,发现其原理其实十分简单,简述如下: (1)在待排序列中找一个"中枢元素"(书本上默认取序 ...
- 本题要求实现一个用选择法对整数数组进行简单排序的函数。_通俗易懂讲 Python 算法:快速排序...
原文:https://stackabuse.com/quicksort-in-python/ 作者:Marcus Sanatan 译者:老齐 欢迎在 bilibili 搜索 freeCodeCamp ...
- 三分钟学会快速排序(图示讲解,附代码,通俗易懂)
tag:分治.排序 快速排序的通俗解释 1.从数组中选出一个元素xxx(可以随意选取) 2.把所有<=x<=x<=x的元素放在x前面(形成一个子区间),所有>=x>=x& ...
- 快速排序基本思路(通俗易懂+例子)
https://blog.csdn.net/code_AC/article/details/74158681 快速排序 今天看到大神写的一篇快速排序的博客,肃然起敬,觉得原来快速排序这么简单 下面进行 ...
- js数组按中文拼音排序_通俗易懂讲 Python 算法:快速排序
原文:https://stackabuse.com/quicksort-in-python/ 作者:Marcus Sanatan 译者:老齐 欢迎在 bilibili 搜索 freeCodeCamp ...
- 快速排序(代码通俗易懂,干净整洁)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.快速排序思路 二.快速排序代码 三.读入数据 总结 前言 快速排序的特点 1.快速排序是对冒泡算法的改进. 2.快 ...
- 我见过最通俗易懂的快速排序过程讲解,转自《坐在马桶上看算法:快速排序》
https://blog.csdn.net/vayne_xiao/article/details/53508973
最新文章
- Python之超级好用的8个VS Code扩展
- cxf返回的报文,命名空间无前缀
- Fn函数来构建Oracle ADF应用程序
- 一张图解决项目常见乱码问题
- 计算机逻辑学包含分析,逻辑学在职研究生教育的基本内容分析
- 使用SQLite3支持中文路径
- 游戏中出现服务器维护中怎么办,游戏服务器显示维护中
- delphi 防止程序双开 更好的 Best!
- 表单里面能不能套表单_抽奖+表单,居然还能这么玩?
- 又一篇好文:折磨人的商业计划书
- java图书借阅系统java图书管理系统java书籍借阅系统
- 软件工程——软件开发模型
- 郑州等保测评公司有哪些?在哪里?
- Boost Asio介绍
- SQLyog启动:错误号码2003问题的解决
- AI生活助理玩秘获1000万元Pre-A融资,启赋资本和英诺天使基金投资
- 力扣刷题 DAY_78 贪心
- 常用的Transformation
- C++四大特性——多态 的总结
- 2015年全国谷歌卫星地图离线数据存储方案
热门文章
- docx 图片预处理 Java_java使用poi给docx文档添加图片(官方例子)
- VALSE 2017 | 神经网络模型压缩优化方法
- Wellbox牵手豌豆淘,强强联手进抢占美容仪器市场
- 有10箱产品,每箱有1000件,其中正品每件100克。其中有几箱是次品,每件次品比正品轻10克,问能否用秤只称一次,就找出哪几箱是次品?
- 一个女孩5年的IT销售经历
- linux release 版本的区别,Linux 查看版本信息
- QT Libvlc旋转播放视频
- 2021.09.24—皮皮与帅帅的第二篇情话
- 字符串除去数字和小数点以外的内容
- 为什么现在是做跨境电商亚马逊店群的最佳时期?