您的位置:首页 > 其它

【经典算法】第一回:快速排序

2013-02-21 15:23 204 查看

1.概述

快速排序(Quick sort) 原理:

选取一个基数,通过一次扫描将要排序的数据分割成两部分,其中一部分所有数据都比这个基数小,另外一部分所有数据都不小于这个基数,然后按照此方法进行递归,已达到排序。

方法步骤:

设定要排序的起始和结束位置

选一个基数,一般直接选这个起始和结束坐标的中间坐标

已这个基数为准,循环遍历集合,从起始坐标开始,把大于基数的放在基数的右边,从结束坐标开始查找,把小于基数的放在基数的左边。

一次排序后,左边的数据都小于基数,右边的都大于基数,再重新开始上面的步骤1,2,3

2.示例

public static void QuickSort(int[] nums, int left, int right)
{
if (left < right)
{
int i = left;
int j = right - 1;
int middle = nums[(left + right) / 2];//中间基数

while (true)
{
while (i < right && nums[i] < middle)//从左边开始搜索第一不小于基数的值,放到右边
{
i++;
}

while (j > 0 && nums[j] > middle)//从右边开始搜索第一个小于基数的值,放到左边
{
j--;
}
if (i == j)
break;

int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;

if (nums[i] == nums[j])
j--;
}

QuickSort(nums, left, i);
QuickSort(nums, i + 1, right);
}
}
//   int[] list = new[] { 4, 1, 2, 7, 9, 0, 8 };
//   Sorter.QuickSort(list, 0, 7);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: