关闭

优化排序之快速排序

127人阅读 评论(43) 收藏 举报

【前言】:
最近小组一起讨论了三种基础排序:选择排序、冒泡排序、插入排序,以及他们的优化堆排序,快速排序、希尔排序,现在由小编分享一下快速排序;

【内容】:

1.快速排序的思想:
      快速排序的思想归纳起来有的三步:
      第一步:任意选取序列中的一个元素,用此元素作为“中间元素”,这里说明一下,这个“中间元素”,排序后不一定刚好在序列的中间。
     第二步:在序列中取出所有大于“中间元素”的元素,放在“中间元素”的右边。
    第三步:在序列中取出所有小于“中间元素”的元素,放在“中间元素”的左边。
经过这三步后便完成了一轮排序。
2、递归调用
     经过一轮排序后,序列一般被“中间元素”分成两部分,一部分比“中间元素”小,另一部分反之。所以我们要继续排序剩下的两部分,所以我们要理解递归

的思想,只要我们继续利用以上的三步,排序剩下的两部分,最终便会排序完整个序列。

【实例】:

下面是我用c#进行的实例,跟大家交流一下;

       

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 快速排序
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入待排序数列(以\",\"分割):");
string _s = Console.ReadLine();
string[] _sArray = _s.Split(",".ToCharArray());
int _nLength = _sArray.Length;
int[] _nArray = new int[_nLength];
for (int i = 0; i < _nLength; i++)
{
_nArray[i] = Convert.ToInt32(_sArray[i]);
}

var list = _nArray.ToList();
QuickSort(list, 0, _nLength - 1);

foreach (var i in list)
{
Console.WriteLine(i.ToString());
}
while (true)
{
// Thread.Sleep(10000);
}
}
//获取按枢轴值左右分流后枢轴的位置
private static int Division(List<int> list, int left, int right)
{
while (left < right)
{
int num = list[left]; //将首元素作为枢轴
if (num > list[left + 1])
{
list[left] = list[left + 1];
list[left + 1] = num;
left++;
}
else
{
int temp = list[right];
list[right] = list[left + 1];
list[left + 1] = temp;
right--;
}
Console.WriteLine(string.Join(",", list));
}
Console.WriteLine("--------------\n");
return left; //指向的此时枢轴的位置
}
private static void QuickSort(List<int> list, int left, int right)
{
if (left < right)
{
int i = Division(list, left, right);
//对枢轴的左边部分进行排序
QuickSort(list, i + 1, right);
//对枢轴的右边部分进行排序
QuickSort(list, left, i - 1);
}
}
}
}


【前言】:
最近小组一起讨论了三种基础排序:选择排序、冒泡排序、插入排序,以及他们的优化堆排序,快速排序、希尔排序,现在由小编分享一下快速排序;
【内容】:
1.快速排序的思想:
快速排序的思想归纳起来有的三步:
第一步:任意选取序列中的一个元素,用此元素作为“中间元素”,这里说明一下,这个“中间元素”,排序后不一定刚好在序列的中间。
第二步:在序列中取出所有大于“中间元素”的元素,放在“中间元素”的右边。
第三步:在序列中取出所有小于“中间元素”的元素,放在“中间元素”的左边。
经过这三步后便完成了一轮排序。
2、递归调用
经过一轮排序后,序列一般被“中间元素”分成两部分,一部分比“中间元素”小,另一部分反之。所以我们要继续排序剩下的两部分,所以我们要理解递归
的思想,只要我们继续利用以上的三步,排序剩下的两部分,最终便会排序完整个序列。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12800次
    • 积分:3425
    • 等级:
    • 排名:第10196名
    • 原创:49篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1505条
    最新评论