写这段代码改了好几个小时,从有这个想法到完成花费了比较久的时间,也很有成就感。速成课给的伪代码思路漏掉了需要判断最小数是否正好是这个数本身这个条件,所以一直报错。所以写代码要把每种可能性都涵盖,不然程序就会出问题。之前学速成课的时候我对第十三章算法入门很感兴趣,还专门留了个坑想把并归排序和dijkstra算法的代码写出来,现在算是朝目标靠近了一点点。。。。。。
#include <stdio.h>
void sel(int* arr, int n)
/*选择排序selection sort,从小到大排序*/
{
for (int i = 0; i < n - 1; i++)
{
int smallest = arr[i];
int index = i + 1;
int* ptr = 0;
for (; index < n; index++)
{
if (arr[index] < smallest)
{
smallest = arr[index];
ptr = &arr[index];
}
}
if (smallest == arr[i])
ptr = &arr[i];
int p = 0;
p = arr[i];
arr[i] = smallest;
*ptr = p;
}
for (int i = 0; i < n; i++)
printf("%d\n", arr[i]);
}
int main()
{
int a[5];
int i = 0;
for (; i < 5; i++)
{
scanf_s("%d", &a[i]);
}
sel(a, 5);
return 0;
}
18.40-22.00 完成选择排序代码。请余老师看看代码有没有什么问题(余老师比较忙,过几天再教我)。查并归排序的思路(超出能力范围)。做第8章函数习题。