2

C 选择排序

 2 years ago
source link: https://blog.ixk.me/post/c-select-sort
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

C 选择排序

2018-10-27 • Otstar Lin •
本文最后更新于 268 天前,文中所描述的信息可能已发生改变

就按上一篇的格式写吧,其实还有很多 C 笔记可以水几篇文章,偷懒中。。

[alert-success]此算法已修复,放错了交换代码的位置,导致出现问题,我果然是菜鸡( ̄ ▽  ̄)”[/alert-success]

思想和举例

选择排序同样是通过遍历的方式进行比较排序的,只不过不再是通过不断交换相邻的两个数字,而是遍历搜索最大或最小值然后将最大值或最小值与最后方或者最前方的值进行交换,以此类推直到最后完成排序,具体排序的过程可以查看维基百科,偷懒。。

看什么呢,没有举例~( ̄ ▽  ̄)~

算法总结与实现

不用介绍了直接上算法吧( ̄ ▽  ̄)”

1#include <stdio.h>
2#define N 10 //定义要排序的数组长度
3//选择排序控制Demo
4//选择排序结果和方式
5//结果:输出排序的数组
6//方式:遍历比较
7//本例排序从低到高
8int main(int argc, char const *argv[])
9{
10    int nums[N], temp, j, i;
11    printf ("请输入要进行排序的数列:\n");
12    for (int u = 0; u < 10; u++) //循环输入数组
13    {
14        scanf ("%d", &nums[u]);
15    }
16
17    //
18    //升序排列
19    //
20    printf ("降序排列:\n");
21    for (i = 0; i < N; i++) //外层循环,控制循环轮数
22    {
23        int m = i;
24        for (j = i + 1; j < N; j++) //内层循环,控制遍历数组,寻找最小的数,并进行交换指针
25        {
26            if (nums[m] > nums[j]) //判断附近两个数谁最小
27            {
28                m = j; //标记最小的数
29            }
30        }
31        temp = nums[m]; //交换最小的数到前方
32        nums[m] = nums[i];
33        nums[i] = temp;
34    }
35
36    //输出排序好是数组
37    int u;
38    for (u = 0; u < N - 1; u++)
39    {
40        printf ("%d ", nums[u]);
41    }
42    printf ("%d\n",nums[u]);
43
44    //
45    //降序排列
46    //
47    //输出排序好是数组
48    for (u = N - 1; u > 0; u--)
49    {
50        printf ("%d ", nums[u]);
51    }
52    printf ("%d\n",nums[u]);
53
54    return 0;
55}

对了,这次采用了循环输入,不用再写很长的输入了ヾ(≧▽≦*)o

C 选择排序
Otstar Lin
转载或引用本文时请遵守许可协议,注明出处、不得用于商业用途!

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK