#define MAXSIZE 100
#include<stdio.h>
typedef struct
{
int key;
//int other;
}recordtype;
typedef struct
{
recordtype r[MAXSIZE];
int length;
}table;
//插入排序:初始认为第一个元素已经排好,其余元素依次从右往左比较,边比较边移动
void insertsort(table* tab)
{
//外层循环控制轮数
for (int i = 2; i <= tab->length; i++)//i 表示将要插入的元素
{
int j = i - 1;
//设置哨兵
tab->r[0] = tab->r[i];
//内层循环控制每轮的比较次数,并执行移动操作
while (tab->r[0].key < tab->r[j].key)
{
tab->r[j + 1] = tab->r[j];
j--;
}
tab->r[j + 1] = tab->r[0];
}
}
//选择排序:从n个待排元素中找到最小的,与第一个元素替换;之后从剩下的n-1中,找到最小的与第二个元素替换;
//最终,只剩下两个元素,找到最小的,与n-1替换,剩下的就是最大的
void simpleselectsore(table* tab)
{
//大循环控制比较轮数
for (int i = 1; i <= tab->length - 1; i++) //i表示最小元素最终所处的位置
{
int k; //用于存放最小元素的下标
k = i;
//打擂台法选择最小的数据
for (int j = i + 1; j <= tab->length; j++)
{
if (tab->r[j].key < tab->r[k].key)
k = j;
}
if (k != i)
{
tab->r[0] = tab->r[k];
tab->r[k] = tab->r[i];
tab->r[i] = tab->r[0];
}
}
}
int main()
{
table tab;
tab.length = 5;
//赋初值
tab.r[1].key = {1};
tab.r[2].key = {8};
tab.r[3].key = {10};
tab.r[4].key = {3};
tab.r[5].key = {5};
//insertsort(&tab);
simpleselectsore(&tab);
printf("排序后的结果为:");
for (int i = 1; i <= 5; i++)
{
printf("%d", tab.r[i]);
printf(" ");
}
return 0;
}
数据结构——选择排序,直接插入排序
最新推荐文章于 2023-05-10 18:13:25 发布