博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【算法】简单选择排序 O(n^2) 不稳定的 C语言
阅读量:4968 次
发布时间:2019-06-12

本文共 1973 字,大约阅读时间需要 6 分钟。

 

简单选择排序

 一、算法描述                                                     

 

假设序列中有N个元素:

1趟找到第1N个元素之间最小的一个,与第1个元素进行交换

2趟找到第2N个元素之间最小的一个,与第2个元素进行交换

3趟找到第3N个元素之间最小的一个,与第3个元素进行交换

m趟找到第mN个元素之间最小的一个,与第m个元素进行交换

N趟(最后一趟)找到第NN个元素之间最小的一个(即最后一个元素),与第N个元素进行交换(无需交换)

 

即每次找到剩下无序序列中元素中最小的,与无序序列最前面的元素交换,逐渐形成第一个元素有序,第一到二个元素有序,第一到三个元素有序。。。。。。。全部元素有序

 

 二、算法分析                                                     

有两层循环,共需作 n(n-1)/2 次比较,固时间复杂度为O(n^2)

且是不稳定的排序算法,空间复杂度为O(1)

无论序列怎样,都需完成N趟排序,所以最好、最坏和平均情况的执行时间是相同的

 

 三、算法实现代码                                                 

定义顺序表代码:

typedef struct list {	int Size;//大小 	int Elements[MaxSize];//用数组存放 }List;//定义顺序表

定义简单选择函数代码:

void Jiandanxuanze(List*lst){	int small;//存放最小元素下标	int i, j, temp;	for (i = 0; i
Size - 1; i++)//最后一次无需执行,共执行Size-1次 { small = i; for (j = i + 1; j
Size; j++) { if (lst->Elements[j]
Elements[small]) small = j;//找到最小的元素的下标存在small,然后与i进行交换 } temp = lst->Elements[i]; lst->Elements[i] = lst->Elements[small]; lst->Elements[small] = temp;//把最小的元素与最前的即i进行交换 }}

 四、实例测试代码                                                 

#include 
#include
#include
#define MaxSize 99typedef struct list { int Size;//大小 int Elements[MaxSize];//用数组存放 }List;//定义顺序表void Jiandanxuanze(List*lst);//函数声明int main(void) { List a; int i; srand((unsigned)time(NULL)); //随机数种子 a.Size = 10;//定义大小为10 for ( i = 0; i<10;i++) { a.Elements[i] = rand() % 10;//初始化顺序表 } printf("原表为:"); for (i = 0; i < 10;i++) { printf("%d ", a.Elements[i]); } printf("\n"); Jiandanxuanze(&a);//调用简单选择函数,修改值需传入地址 printf("简单选择排序后为:"); for (i = 0; i < 10; i++) { printf("%d ", a.Elements[i]); } getchar(); return 0;}void Jiandanxuanze(List*lst){ int small;//存放最小元素下标 int i, j, temp; for (i = 0; i
Size - 1; i++) { small = i; for (j = i + 1; j
Size; j++) { if (lst->Elements[j]
Elements[small]) small = j;//找到最小的元素的下标存在small } temp = lst->Elements[i]; lst->Elements[i] = lst->Elements[small]; lst->Elements[small] = temp;//把最小的元素与最前的进行交换 }}

转载于:https://www.cnblogs.com/Ahair/p/5005571.html

你可能感兴趣的文章
文档:网络通讯包结构(crc校验,加解密)
查看>>
南天竹
查看>>
ArrayBlockingQueue 源码阅读 问题(一)
查看>>
人工智能第二次作业 书上69页作业
查看>>
Activity取消默认转场动画;去掉默认转场动画;
查看>>
查看磁盘读写
查看>>
String对象方法属性总结
查看>>
开启otl的64位长整数支持
查看>>
centos6搭建本地openstack软件源
查看>>
android 图片水平反复平铺(repeat x)
查看>>
mysql 数据库备份ubuntu
查看>>
Amazon RDS的通用型存储(SSD)
查看>>
php上传zip、xml文件失败
查看>>
[软件工程--个人作业] 敏捷开发读后感
查看>>
洛谷P3398 仓鼠找sugar [LCA]
查看>>
专为iPhone开发者准备的50款经典开源应用
查看>>
mysql不支持在子查询中使用limit解决办法
查看>>
兼容性问题
查看>>
【洛谷3467/BZOJ1113】[POI2008]海报PLA-Postering(单调栈)
查看>>
致青春---关于工作生活的一点感想
查看>>