排序——快速排序(QuickSort)
有些东西再不贴出来,以后可能再也找不到了。陆续整理曾写过的排序算法。
快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
原理不多做介绍了,有需要可以看看这里:
http://www.hiahia.org/datastructure/paixu/paixu8.3.2.1-1.htm
上代码:
const int NUM=20;
int arr[] = {1,10,11,5,6,15,0,15,16,14,0,8,17,15,7,19,17,1,18,7};
/* swap函数:交换v[k]与v[j]的值 */
inline void swap(int v[], int k, int j)
{
int temp;
temp = v[k];
v[k] = v[j];
v[j] = temp;
}
void qsort(int v[], int left, int right)
{
int j, left_c,right_c,sigh;
left_c=left; //当前一趟快排的最左序号
right_c=right; //当前一趟快排的最右序号
sigh=0; //0表示从左边开始排
while(left_c!=right_c)
{
if(v[left_c]<v[right_c]) //搜索可以交换的位置
{
if(sigh==0)
--right_c;
else
++left_c;
continue;
}
if(sigh==0) //小头有空,交换
{
swap(v,left_c++,right_c);
sigh=1;
}
else //大头有空,交换
{
swap(v,left_c,right_c--);
sigh=0;
}
}
for(j=0;j<NUM;++j)
cout<<v[j]<<" ";
cout<<endl;
/*一次快排结束,小头和大头继续搜索*/
if(left<left_c-1)
qsort(v, left, left_c-1);
if(right>right_c+1)
qsort(v, right_c+1, right);
}
void main()
{
int j;
qsort(arr, 0, NUM-1);
for(j=0; j<NUM; j++)
printf("%d ", arr[j]);
printf("/n");
}
排序——快速排序(QuickSort)相关推荐
- 快速排序(quicksort)算法实现
快速排序(quicksort)是分治法的典型例子,它的主要思想是将一个待排序的数组以数组的某一个元素X为轴,使这个轴的左侧元素都比X大,而右侧元素都比X小(从大到小排序).然后以这个X在变换后数组的 ...
- 快速排序(quickSort) 和 插入排序(insertSort)
1.快速排序(quickSort) (1)在数据集之中,选择一个元素作为"基准"(pivot). (2)所有小于"基准"的元素,都移到"基准" ...
- quicksort java_Java代码实现快速排序(QuickSort)
Java代码实现快速排序(QuickSort) 核心思想 如果要排序数组中下标从p到r之间的一组数据,我们选择p到r之间的任意一个数据为pivot(分区点). 我们遍历p到r之间的数据,将小于pivo ...
- DS排序--快速排序
题目 问题 C: DS排序--快速排序 时间限制: 1 Sec 内存限制: 128 MB 提交: 480 解决: 303 [提交][状态][讨论版] 题目描述 给出一个数据序列,使用快速排序算法进行从 ...
- 【啊哈!算法】算法3:最常用的排序——快速排序
[啊哈!算法]算法3:最常用的排序--快速排序 上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到 ...
- 最常用的排序---快速排序法
最常用的排序-快速排序法 桶排序浪费空间,冒泡排序虽然解决了空间问题却在算法的执行效率上牺牲了很多,因此我们的快速排序法就诞生了,是不是听这个名字就很高档呢? 假设现在需要对"6,1,2,7 ...
- 排序-交换类排序--快速排序简介
交换类排序有冒泡和快排 冒泡排序相对简单,之前总结过: https://blog.csdn.net/u011109881/article/details/80038573 快速排序 参考: 数据结构( ...
- 排序1+3:基数排序(RadixSort),希尔排序(ShellSort)和快速排序(QuickSort)
1 基数排序 基数排序对于整数特别有效.是一种稳定的算法(意思是相同的数字不会交换关系).基数排序是根据数字的性质来逐步根据个位数,十位数,百位数分类求得排序结果的方法之一.它的想法如下: (1)先将 ...
- 排序算法--快速排序(QuickSort)、 3区快速排序(3 Way QuickSort)原理、适用场景及代码示例
快速排序 概念介绍 QuickSort快速和归并排序一样,是采用分治法解决问题的一个典型应用.它选择一个元素作为基准元素,并围绕选定的基准元素对给定数组进行分区. quickSort有很多不同的版本, ...
- 快速排序quicksort算法细节优化(一次申请内存/无额外内存排序)
文章目录 1.只申请一次内存,避免多次递归调用时反复的申请和释放内存,提高程序运行效率 2.不申请内存,在原数组上直接排序 优化比较总结 对链接中快速排序进行代码优化 https://blog.csd ...
最新文章
- SpringMVC处理MYSQL BLOB字段的上传
- 数据库修复Part1:创建自己的测试corrupt数据库
- mqtt服务器性能H3,运用 MQTT-JMeter 插件测试 MQTT 服务器性能
- js操作改变原数组的解决方法
- Cloud Native 介绍
- java jquery post_jquery js post变量set和get for post
- redis发布订阅c接口_Redis 发布/订阅机制原理分析
- HTML系列(四):编辑图像
- Swift语法专题五——集合类型
- 跟我学MVC系列(Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX)(六)(应用IOC模式)...
- c 语言表达式求值中缀变后缀,表达式求值关于中缀式转后缀式的问题!
- webstorm如何自定义代码模板
- vs2015安装qt5教程
- 漫威电影(复仇者联盟)系列观看顺序和资源下载地址
- 明尼苏达大学双城分校计算机科学,明尼苏达大学双城分校计算机专业研究生需要满足哪些条件?...
- 移动 App 背后的一站式存储解决方案实践
- 微信小程序-输入框输入文字后,将光标移到文字中间,接着输入文字后光标又自动跳到最后...
- 2020 Python中文社区热门文章 Top 10
- java在线api中文_JAVA中英文API(在线版)
- 企企通持续助力全球管道预制先行者「迈科管道」,二期项目逐步启动
热门文章
- 浪潮国产芯片服务器,国产AI 芯片鲲云CAISA完成浪潮AI服务器认证测试
- 开车好用的蓝牙耳机有哪些?商务通话蓝牙耳机推荐
- java调整字体_用java修改字体样式
- 若依POI导入Excel多种日期格式转换为一种
- 机器人“攻占”北京亦庄 华为Wi-Fi网络保驾护航
- 通过邮箱监控gpu温度
- Android Studio——android中handler用法总结
- pyecharts地理坐标系只显示南海诸岛问题
- ChatGPT 对企业意味着什么?
- 2019-7-26 [MySQL] 安装与介绍 语句分类/语法 数据类型 DDL数据定义:创建/查看/删除/使用 DML数据操作:增删改 主键约束 自动增长列 非空约束 默认值 Navicat