QuickSort是一种递归排序的算法,每一次迭代的过程是,
从序列中选出一个元素midvalue,把所有比它小的放在它的前面,大于等于它的放在它的后面。
然后再对前半个序列和后半个序列分别做同样的事。
参数start和endlist中要进行排序的子列的起始元素下标和结束元素下标。
以下实现中,一趟排序的过程为:
选第一个元素的值作为midvalue;
border是一个下标变量,意义是border右边的元素大于等于midvalue,此时border=1;
依次判断后面的所有元素,如果大于等于midvalue,就应当插入到border的右边,同时border+1;
当所有元素判断完后,是这么个情况:
[midvalue] [values < midvalue] [values >= than midvalue]
border->|
此时border是最后一个小于midvalue的元素的下标。
最后把第一个元素和border一交换,大功告成。

static void Main(string[] args)
{
//test1();
//List<int> li = new List<int>();
//li[18] = 99;
//test2();
//int[] list = { 5, 4, 1, 3, 2, 7, 6 };
//int[] list = {6,5};
//int[] list = { 5,5,5};
//int[] list = {7,6,5,4,3,2,1 };
//int[] list = { 7,6,6,5,5,4,4,3,3,2,2,1,1};
//int[] list = { 6, 5, 1, 2, 7, 3, 6, 9, 8 };
int[] list = new int[200];
Random rand = new Random();
for (int i = 0; i < 200; i++)
{
list[i] = rand.Next(120);
}
QuickSort(list, 0, list.Length - 1);
Console.Read();
}
private static void QuickSort(int[] list, int start, int end)
{
if (start >= end) return;
int midvalue = list[start];//为了性能
int border = start;//border右边是大于等于midvalue的第一个元素
for (int i = start + 1; i <= end; i++)
{
if (list[i] < midvalue) //需要放到border左边
{
Swap(list, i, ++border);
}
}
Swap(list, border, start);
QuickSort(list, start, border - 1);
QuickSort(list, border + 1, end);
}
private static void Swap(int[] list, int i, int j)
{
int temp = list[i];
list[i] = list[j];
list[j] = temp;
}
{
//test1();
//List<int> li = new List<int>();
//li[18] = 99;
//test2();
//int[] list = { 5, 4, 1, 3, 2, 7, 6 };
//int[] list = {6,5};
//int[] list = { 5,5,5};
//int[] list = {7,6,5,4,3,2,1 };
//int[] list = { 7,6,6,5,5,4,4,3,3,2,2,1,1};
//int[] list = { 6, 5, 1, 2, 7, 3, 6, 9, 8 };
int[] list = new int[200];
Random rand = new Random();
for (int i = 0; i < 200; i++)
{
list[i] = rand.Next(120);
}
QuickSort(list, 0, list.Length - 1);
Console.Read();
}
private static void QuickSort(int[] list, int start, int end)
{
if (start >= end) return;
int midvalue = list[start];//为了性能
int border = start;//border右边是大于等于midvalue的第一个元素
for (int i = start + 1; i <= end; i++)
{
if (list[i] < midvalue) //需要放到border左边
{
Swap(list, i, ++border);
}
}
Swap(list, border, start);
QuickSort(list, start, border - 1);
QuickSort(list, border + 1, end);
}
private static void Swap(int[] list, int i, int j)
{
int temp = list[i];
list[i] = list[j];
list[j] = temp;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?