数据结构-排序-选择排序
1.算法思想
- 选择排序的思想: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。重复第二步,直到所有元素均排序完毕。
2.算法复杂度
- 执行时间: O(n^2)
- 附加空间: 一个存储最小记录的空间
- 是否是稳定的排序方法: 不稳定
3.算法实现
#include "stdio.h"
#define MAXSIZE 10
typedef int keytype;
typedef struct {
keytype key;
}recordtyp;
typedef struct {
int length;
recordtyp r[MAXSIZE + 1];//多一个是储存的附加空间
}table;
table * selectsort(table * tab)
{
int i, j, min_location; //min_location 是记录最小排序码记录的下标的变量
//从
for (i = 1; i <= tab->length - 1; i++)
{
min_location = i;
//从第 i+1 个记录开始依次比较,更新最小记录的位置下标
for (j = i + 1; j <= tab->length; j++)
{
//比较当前的记录和最小记录的排序码,如果小于最小记录就更新最小记录的下标
if (tab->r[j].key < tab->r[min_location].key)
{
min_location = j;
}
}
//如果最小位置不是第 i 个记录就进行交换
if (min_location != i)
{
tab->r[0] = tab->r[min_location];
tab->r[min_location] = tab->r[i];
tab->r[i] = tab->r[0];
}
}
return tab;
}
table * inputData(table * tab) {
printf("please input the length:\n");
scanf("%d", &tab->length);
printf("please input the data:");
for (int i = 1; i <= tab->length; i++)
{
scanf("%d", &tab->r[i].key);
}
return tab;
}
void show(table * tab) {
printf("the result data:");
for (int i = 1; i <= tab->length; i++)
{
printf("%d ", tab->r[i].key);
}
}
void main() {
table * tab = malloc(sizeof(table));
tab = inputData(tab);
tab = selectsort(tab);
show(tab);
}
运行截图
欢迎大家关注我的博客:breeziness123
转载说明出处