简单选择排序算法
简单选择排序算法
基本策略
- 每次从无序序列中选出一个关键字最大(最小)的记录添加到有序序列尾部
基本思想
-
第一趟:从长度为len的序列中选出关键字最大(最小)的记录与第1个记录交换
-
第二趟:从第2个数据开始,从长度为 len-1 的序列中选出关键字最大(最小)的记录与第2个记录交换
-
第三趟:从第3个数据开始,从长度为 len-2 的序列中选出关键字最大(最小)的记录与第3个记录交换
-
…
-
第 i 趟:从第 i 个数据开始,从长度为 len-i+1 的序列中选出关键字最大(最小)的记录与第 i 个记录交换
-
如此进行,直至第 n-1 趟完成,则序列排序完成
实例分析
- 以序列 {6, 15, 45, 23, 9, 78, 35} 做升序排列,其简单排序过程如下
算法分析
- 采用双循环,设置 index, i, j 三个指针,index 用于指示最大(最小)关键字所在, i 用于控制外循环, j 用于控制内循环
- index 指针指向第 i 个数据,遍历剩下的第 n - i 个数据,若找到关键字比第 i 个数据大(小),则将 index 指向该关键字
- 当遍历 n-i 个数据完成后,则 index 的指向则为最大(小) 关键字,若 index 与 i 不等,则说明存在比 i 大(小)的关键字
- 最后,交换 index 与 i 指向的关键字,当完成 n - 1 趟,序列则有序
算法实现(c语言)
/*
* Function:Simple_Select_Sort
* Description:简单选择排序
* Parameter:R 无序序列 len 序列长度
* Return:void
*/
void Simple_Select_Sort(int R[], int len)
{
//对序列 R 做升序排列
for (int i = 0; i < len - 1 ; i++) //比较 n-1 趟
{
int index = i;
for (int j = i + 1; j < len; j++)
{
//寻找最小关键字的索引
if (R[index] > R[j])
{
index = j;
}
}
//关键字最小的记录不在第i个位置上,将关键字最小的记录与第i个位置交换
if (index != i)
{
int temp = R[index];
R[index] = R[i];
R[i] = temp;
}
}
}
算法性能分析
算法测试(c语言)
#include <stdio.h>
void Simple_Select_Sort(int R[], int len)
{
//对序列 R 做升序排列
for (int i = 0; i < len - 1 ; i++) //比较 n-1 趟
{
int index = i;
for (int j = i + 1; j < len; j++)
{
//寻找最小关键字的索引
if (R[index] > R[j])
{
index = j;
}
}
//关键字最小的记录不在第i个位置上,将关键字最小的记录与第i个位置交换
if (index != i)
{
int temp = R[index];
R[index] = R[i];
R[i] = temp;
}
}
}
int main(void)
{
int R[] = {6, 15, 45, 23, 9, 78, 35};
int len = sizeof(R) / sizeof(int);
printf("排序前序列为:\n");
for (int i = 0; i < len; i++)
{
printf("%d\t", R[i]);
}
printf("\n");
Simple_Select_Sort(R, len);
printf("排序后序列为:\n");
for (int i = 0; i < len; i++)
{
printf("%d\t", R[i]);
}
return 0;
}
输出如下
参考资料
- 《数据结构与算法》北京大学出版社 2018年版 林劼 刘震 陈端兵 戴波 著
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构