参考视频:
数据结构合集 - 简单选择排序(选择排序)(算法过程, 效率分析, 稳定性分析)_哔哩哔哩_bilibili
核心规则:
将最前面的数,当做是最小值,在剩下的数中找到真正最小的值去交换
6-11 简单选择排序
分数 20
作者 启迪-数据结构教研组
单位 广西科技大学
利用简单选择排序算法,将顺序表L中的元素从小到大进行排序。
函数接口定义:
void SimpleSelectionSort(List L);
其中 List 结构定义如下:
struct LNode{
int Data[MAXSIZE]; //Data为待排序序列数组
int Last; //Last为最后一个元素的数组下标
};
typedef struct LNode *List;
裁判测试程序样例:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 1000
struct LNode{
int Data[MAXSIZE]; //Data为待排序序列数组
int Last; //Last为最后一个元素的数组下标
};
typedef struct LNode *List;
void SimpleSelectionSort(List L);
List Create()
{
List L;
L = (List)malloc(sizeof(struct LNode));
int j = 0,ch;
/*输入待排序序列,输入 ctrl+Z 结束*/
while(scanf("%d",&ch)!=EOF)
{
L->Data[j] = ch;
j++;
}
L->Last = j-1;
return L;
}
int main()
{
int i;
List L = Create();
SimpleSelectionSort(L);
for(i=0;i<=L->Last;i++)
printf("%d ",L->Data[i]);
return 0;
}
/* 请在这里填写答案 */
输入样例:
99 66 45 33 37 10 22 13
输出样例:
10 13 22 33 37 45 66 99
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
C (gcc)
void SimpleSelectionSort(List L) {
int i, j, min_idx, temp;
// 外层循环:确定待排序区间的起始位置 i
for (i = 0; i < L->Last; i++) {
// 假设当前区间第一个元素是最小值
min_idx = i;
// 内层循环:在待排序区间 [i, L->Last] 找最小值的下标
for (j = i + 1; j <= L->Last; j++) {
if (L->Data[j] < L->Data[min_idx]) {
min_idx = j;
}
}
// 交换当前区间第一个元素和最小值元素
if (min_idx != i) {
temp = L->Data[i];
L->Data[i] = L->Data[min_idx];
L->Data[min_idx] = temp;
}
}
}