您的位置:首页 > 其它

基础算法----快速排序

2017-02-27 00:00 218 查看
摘要:
国内很多程序员来说算法,数据结构,操作系统,网络这些很基础的知识反而都比较薄弱,因为大部分学校或者培训机构的教学能力有限,指导方向都是偏重于实践与实用。

但是随着程序员能力的提升,回头去提升自己基础知识是非常有必要,以算法来说不管是日常编程场景或是面试,掌握常见的10种算法完全可以胜任。

基础算法本身不难,但是好多人在开始之前就先懦弱的害怕了,这个系列简单介绍常见的10种基础算法,抛砖引玉。

快速排序算法

快速排序使用分治法策略把一个串行分为两个子串行(两个串行的分割点就是基准点,两部分是大于基准点部分和小于基准点部分)。

数列中选择一个元素作为基准点,常从第一个元素开始;

序列中小于基准点的元素放到前面,大于基准点的元素放到基准点后面,这个过程称为分区操作;

递归的把两个子序列(大于基准点部分,小于基准点部分)进行递归操作;

退出条件,left = right;

代码示例

static int[] arr = { 6, 1, 2, 7, 9, 3, 4, 5, 10, 8 };

#region 快速排序
static void quickSort(int left,int righ)
{
if (left > righ) {
return;
}

int k = arr[left];
int i = left;
int j = righ;

while (i!=j)
{
while (k <= arr[j] && i < j)
{
j--;
}
while (k >= arr[i] && i<j)
{
i++;
}
if(i<j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}

if (i == j)
{
arr[left] = arr[i];
arr[i] = k;
}

quickSort(left,i-1);
quickSort(i+1,righ);
}
#endregion

结果



源码

http://git.oschina.net/aspnet/Suan-Fa
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  基础算法