快速排序
来源:互联网 发布:闪电站小猪知乎 编辑:程序博客网 时间:2024/05/16 18:33
之前一直对快速排序算法感觉很有兴趣,但是一直懒癌发作,对中间数的阀值问题懒得思考,今天静下心,不到半个钟也做好了。
果然,人啊,不是做不到,就怕懒得动。以后还要多写多练。
本代码欢迎转载,但转载时请注明转自《极地大王章的博客》。
简要说明:
快速排序:取某个数为“基准”值,网上有称之为哨兵,我觉得蛮形象的。从前往后,从后往前,将比哨兵小的数放在左边,大于等于哨兵的数,放在右边,依次循环一遍,最后将哨兵放在合适的位置。
依次递归左右两边子链,最后得到排好序的链。
我这里选的是最右边的数为基准值。
int quickSort(int a[], int left, int right)
{
if(left >= right)
{
return 0;
}
int Base = right;
right --;
while(left < right)
{
if(a[left] >= a[Base] && a[right] < a[Base])
{
int tmp = a[left];
a[left] = a[right];
a[right] = tmp;
left ++;
right --;
}
else if(a[left] >= a[Base] && a[right] >= a[Base])
{
right --;
}
else
{
left ++;
}
}
if(left == right)
{
if(a[left] > a[Base])
{
int tmp = a[left];
a[left] = a[Base];
a[Base] = tmp;
quickSort(a, 0, left-1);
quickSort(a, right+1, Base);
}
else if (a[left] == a[Base])
{
quickSort(a, 0, left-1);
quickSort(a, right+1, Base);
}
else
{
quickSort(a, 0, left);
quickSort(a, right+1, Base);
}
}
else //right < left && a[right] < a[Base] < a[left]
{
//right在前,left在后,right 小于left
int tmp = a[Base];
a[Base] = a[left];
a[left] = tmp;
quickSort(a, 0, right);
quickSort(a, left+1, Base);
}
return 0;
}
int main()
{
int arr[] = {88,25,64,64,94,39,45,8,38,44,34,51,102,3,4,4,4,5,6,145,23,23,57};
int num = sizeof(arr)/sizeof(int);
quickSort(arr, 0, num-1);
for(int i = 0; i < num; ++i)
{
cout << arr[i] << " ";
}
cout << endl;
getchar();
return 0;
}
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- springcloud学习笔记一:eureka服务注册与发现
- 线程状态,多线程的使用,线程的通信(总结)
- HTTP状态码
- javaScript内置对象String
- SSL2681 2017年8月11日提高组T3 难题(math)
- 快速排序
- 基于python的网络编程
- SpringCloud(六):Ribbon示例
- 欢迎来到我的博客
- [转}浅谈协方差矩阵
- 锋利的jQuery中值得记下的例子(1)
- java常用英文单词
- Android初级开发(四)——补充9、GridView(表格)控件的使用
- Python中isinstance用法