快速排序由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#排序算法6:快速排序的更多相关文章

  1. Java常见排序算法之快速排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  2. 常用排序算法之——快速排序(C语言+VC6.0平台)

    经典排序算法中快速排序具有较好的效率,但其实现思路相对较难理解. #include<stdio.h> int partition(int num[],int low,int high) / ...

  3. Python之排序算法:快速排序与冒泡排序

    Python之排序算法:快速排序与冒泡排序 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/7828610.html 入坑(简称IT)这一行也有些年头了,但自老师 ...

  4. Java排序算法之快速排序

    Java排序算法之快速排序 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分 ...

  5. javascript高级排序算法之快速排序(快排)

    javascript高级排序算法之快速排序(快排)我们之前讨论了javascript基本排序算法 冒泡排序 选择排序 插入排序 简单复习: 冒泡排序: 比较相邻的两个元素,如果前一个比后一个大,则交换 ...

  6. javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)

    javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法) 一.快速排序算法 /* * 这个函数首先检查数组的长度是否为0.如果是,那么这个数组就不需要任何排序,函数直接返回. * ...

  7. 排序算法之快速排序Java实现

    排序算法之快速排序 舞蹈演示排序: 冒泡排序: http://t.cn/hrf58M 希尔排序:http://t.cn/hrosvb  选择排序:http://t.cn/hros6e  插入排序:ht ...

  8. Python实现排序算法之快速排序

    Python实现排序算法:快速排序.冒泡排序.插入排序.选择排序.堆排序.归并排序和希尔排序 Python实现快速排序 原理 首先选取任意一个数据(通常选取数组的第一个数)作为关键数据,然后将所有比它 ...

  9. 基础排序算法之快速排序(Quick Sort)

    快速排序(Quick Sort)同样是使用了分治法的思想,相比于其他的排序方法,它所用到的空间更少,因为其可以实现原地排序.同时如果随机选取中心枢(pivot),它也是一个随机算法.最重要的是,快速排 ...

  10. C++编程练习(16)----“排序算法 之 快速排序“

    快速排序 基本思想: 通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的. 算法介绍: 设要排序的 ...

随机推荐

  1. python数据类型元组、列表、集合、字典相互嵌套

    系统 Windows 10 专业工作站版22H2 软件 python-3.9.6-amd64.exe 拓展库: jupyter==1.0.0 notebook==7.0.6 1.元组嵌套 1.1 元组 ...

  2. 吉特日化MES & 医药行业相关专业术语汇总

  3. 429 You are being rate limited

    记录贴 429 真的很让人伤心 清除浏览器数据 我用的 Edge : 设置 ⇒ 隐私.搜索和服务 ⇒ 清除浏览器数据 ⇒ 立即清除 然后就重新登陆可以了

  4. 一招MAX降低10倍,现在它是我的了

    一.背景 性能优化是一场永无止境的旅程. 到家门店系统,作为到家核心基础服务之一,门店C端接口有着调用量高,性能要求高的特点. C端服务经过演进,核心接口先查询本地缓存,如果本地缓存没有命中,再查询R ...

  5. Android辅助功能

    1:AccessibilityService 新建service public class AccessibilityService extends android.accessibilityserv ...

  6. 【UniApp】-uni-app-打包成网页

    前言 经过上一篇文章的介绍,已经将这个计算器的计算功能实现了,接下来就是我们项目当中的一个发包上线阶段,我模拟一下,目的就是为了给大家介绍一下,uni-app是如何打包成网页的. 除了可以打包成网页, ...

  7. 三个月我迁移了100PB数据

    2023年马上结束,这一年做了不少事情,有一项我可以吹好几年,忍不住和大家分享一下啊. 需求 去年底收到一项需求,要求2个月内从某云存储迁移100PB数据到微软云存储,包含几百亿个文件.当时听到这个数 ...

  8. 【推荐】Helix 常用命令与设置

    目录 Helix常用命令 配置 编辑器 [editor]字段 [editor.statusline] 字段 [editor.lsp] 字段 [editor.cursor-shape] 字段 [edit ...

  9. Blog Statistics Dec 1, 2021 - Dec 1, 2022

    1. Overview Data Date: Dec 1, 2021 - Dec 1, 2022 Number of articles: 51 All Platform Total Visits: 3 ...

  10. 测试攻城狮必备技能点!一文带你解读DevOps下的测试技术

    [摘要]本文将从DevOps模式下对测试人员的活动的变化,以及常用的测试技术层面进行解读. 项目的软件开发模式主要经历瀑布模型.敏捷开发和DevOps这几个阶段,其中DevOps主要解决开发和运维.运 ...