选择排序(内附代码)
来源:互联网 发布:转行数据分析师 编辑:程序博客网 时间:2024/06/07 00:34
选择排序事实上是对冒泡排序的改进,每次只选择前n个元素中最大的一个与无序部分的最后位置元素交换,将冒泡排序中n次的交换减少至1次。
本部分基于双链表实现,首先来看一下双链表的建立过程。
typedef struct node2 { int value; struct node2* before; struct node2* after;}node2;void create_list2(int n, node2* head, node2* tail) { head->before = NULL; head->after = tail; tail->before = head; tail->after = NULL; node2* last = tail; while (n--) { node2* temp = (node2*)malloc(sizeof(node2)); temp->value = 10-n; head->after = temp; temp->before = head; temp->after = last; last->before = temp; last = last->before; }}
之所以选用双链表,是因为可以快速的定位无序部分的最后一个元素位置,方便交换数据。在此基础上,我们再来看选择排序的实现过程:
void selectsort(node2* head, node2* tail) { node2* pos = tail->before; while (pos->before != head) { node2* temp = head->after; node2* max = temp; while (temp != pos) { temp = temp->after; if ((max->value) <= (temp->value)) max = temp; } swap(pos->value,max->value); pos = pos->before; }}
由上述代码可以看到,算法的复杂度依旧是n^2,但是由于交换次序的减少,对于冒泡排序来说,也已经是个不小的改进。其中值得注意的一点是,交换时,用的是小于等于,而不是小于,是因为,要保证算法的稳定性,即如果两个元素大小相同,那么排序过后,本来在后面的元素还应该在后面。
阅读全文
0 0
- 选择排序(内附代码)
- 冒泡排序笔记(内附代码)
- 插入排序(内附代码)
- 排序算法分析【三】:选择排序(附Python&C++代码)
- 排序算法之直接选择排序(内附交换两个数据交换的正确实现方法)
- 二分查找笔记(内附代码)
- 内排序-选择排序
- 选择排序(代码实现)
- 冒泡、选择、快速排序算法(附java实现源码)
- OJ_数组去重_1176(附选择排序)
- 排序算法(冒泡、选择、插入)附Java演示源码
- java内部类总结(附代码说明)
- PCA,LDA的C++实现(内附代码~)
- 下载文件-javaweb案例(内附代码详细说明)
- 《代码大全 》pdf下载(内附下载地址)
- 冒泡排序、简单选择排序、插入排序和快速排序(附源代码)
- 插入排序加二分排序详细讲解(附代码)
- 内排序-选择类排序-堆排序
- 【转载】《实践论》
- Java消息摘要算法加密
- MySQL命令行导出数据库
- java命令报错-找不到或无法加载主类
- 小白入门---CSS基础
- 选择排序(内附代码)
- 【Android】Affinity以及Manifest中Activity的属性值介绍
- h5视频播放
- 重建二叉树--已知一个二叉树的前、中序排列,重建出该二叉树。
- DES、AES、RSA等常用加密算法介绍与比较
- Android json数据Log格式化打印
- 评分卡模型开发-基于逻辑回归的标准评分卡实现
- 【leetcode】15.3sum 两种解法总结
- 【转载】《矛盾论》