博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速排序
阅读量:6068 次
发布时间:2019-06-20

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

快速排序基本思想:通过一趟排序将待排记录分成独立的两部分,其中一部分记录的关键字比另一部分记录的关键字要小,则可继续对这两部分记录进行排序,以达到整个序列有序的目的。。。
 
下面是一个快排的Demo:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 快速排序
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch sw = new Stopwatch();
            sw.Start();
            int[] arr={50,10,90,30,70,40,80,60,20};
            QuickSort(arr);
            for (int i = 0; i <arr.Length; i++)
            {
                Console.WriteLine(arr[i]);
            }
            sw.Stop();
            Console.WriteLine(sw.Elapsed);
            Console.ReadKey();
        }
        private static void QuickSort(int[] arr)
        {
            QSort(arr,0,arr.Length-1);
        }
        private static void QSort(int[] arr, int low, int high)
        {
            int pivot;
            if (low < high)
            {
                //获得关键字(枢轴)
                pivot = Partition(arr,low,high);
                //将关键字左边的在调用QSort排序
                QSort(arr,low,pivot-1);
                //将右边的在排序
                QSort(arr,pivot+1,high);
            }
        }
        private static int Partition(int[] arr, int low, int high)
        {
            //将数组的第一个值作为关键字
            int pivotkey = arr[low];
            while (low < high)
            {
                //从后边开始比较,如果比关键字大,下标减一,在比较,如果小,交换
                while(low < high && arr[high] >= pivotkey)
               
                    high--;
                    swap(arr,low,high);
                //再从前边开始比较,若比关键字大,交换,否则,下标加一,循环比较,知道low==high
                while (low < high && arr[low] <= pivotkey)
                    low++;
                    swap(arr,low,high);
                                    
            }
            return low;
        }
         //两个数两两交换
        private static void swap(int[] arr, int low, int high)
        {
            int temp = arr[low];
            arr[low] = arr[high];
            arr[high] = temp;
        }
    }
}

转载于:https://www.cnblogs.com/zcz527/p/3388721.html

你可能感兴趣的文章
.NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?...
查看>>
复杂业务下,我们为何选择Akka作为异步通信框架?
查看>>
边缘控制平面Ambassador全解读
查看>>
Windows Phone 7 利用计时器DispatcherTimer创建时钟
查看>>
程序员最喜爱的12个Android应用开发框架二(转)
查看>>
vim学习与理解
查看>>
DIRECTSHOW在VS2005中PVOID64问题和配置问题
查看>>
MapReduce的模式,算法以及用例
查看>>
《Advanced Linux Programming》读书笔记(1)
查看>>
zabbix agent item
查看>>
一步一步学习SignalR进行实时通信_7_非代理
查看>>
AOL重组为两大业务部门 全球裁员500人
查看>>
字符设备与块设备的区别
查看>>
为什么我弃用GNOME转向KDE(2)
查看>>
Redis学习记录初篇
查看>>
爬虫案例若干-爬取CSDN博文,糗事百科段子以及淘宝的图片
查看>>
Web实时通信技术
查看>>
第三章 计算机及服务器硬件组成结合企业运维场景 总结
查看>>
IntelliJ IDEA解决Tomcal启动报错
查看>>
默认虚拟主机设置
查看>>