您的位置:首页 > 理论基础 > 数据结构算法

数据结构-快速排序(C#实现)

2017-04-11 11:47 411 查看
快速排序的主要思路:

1.在数组首尾处各设一个标记

2.取出数组第一个值作为中枢值

3.所有数据跟中枢值比较:比中枢值小的放中枢值左边,首部标记++往右推一位,大的放中枢值右边,尾部标记--往左推一位(从小到大排序)

4.先从尾部开始与中枢值比较,如果尾部标记的值比中枢值大直接把标记往左推一位,如果尾部标记比中枢值小就把尾部标记的值放到首部标记的位置,然后开始从首部开始与中枢值比较,如果首部标记的值比中枢值小直接把标记往右推一位,如果首部标记比中枢值大就把首部标记的值放到尾部标记的位置,一直循环直至首尾标记相遇。

5.首尾标记相遇代表找到了中枢值的准确位置,此时将数组从中枢值一分为二,使用递归继续对中枢值左右两侧的数据使用相同的方法进行排序;

C#示例代码:

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

namespace QuickSort
{
class Program
{
static void Main(string[] args)
{
int[] array = { 7, 1, 5, 4, 6, 7, 3, 9, 8, 2 };
QuickSort(0, 9, ref array);
for (int i = 0; i < 10; i++)
{
Console.WriteLine(array[i]);
}
return;
}

static void QuickSort(int iMin,int iMax,ref int[] a)
{
int i = iMin, j = iMax, iPivot = a[iMin];
if (iMin >= iMax)
{
return;
}
while (i < j)
{
while (a[j] >= iPivot && i < j)
{
j--;
}
if (i < j)
{
a[i] = a[j];
i++;
}
while (a[i] <= iPivot && i < j)
{
i++;
}
if (i < j)
{
a[j] = a[i];
j--;
}
}
a[i] = iPivot;
QuickSort(iMin, i - 1, ref a);
QuickSort(i + 1, iMax, ref a);
}
}
}


相关视频链接:https://ke.qq.com/webcourse/index.html#course_id=150239&term_id=100171220&taid=686915594635999&vid=b1411uydxse
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: