C语言练习——原来选择排序也很好用

举报
Code_流苏 发表于 2022/04/21 20:36:02 2022/04/21
【摘要】 C语言练习——原来选择排序也很好用

C语言练习——原来选择排序也很好用

古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。——苏轼

🐼本篇内容简介一、问题呈现-->二、源码实现-->三、输出结果展示-->四、选择排序gif动画-->五、流程分析

一、问题呈现

Problem Description

给定数组元素为:3,44,38,5,47,15,36,26,27,2,46,4,19,50,48。使用选择排序对其进行升序排序

Input

Output

数组元素升序排序后的结果

Sample Input

Sample Output

2 3 4 5 15 19 26 27 36 38 44 46 47 48 50

二、源码实现(+注释)

#include <stdio.h>
//Swap函数实现位置交换
void Swap(int *a,int *b) 
{
	//arr[min]与arr[i] 进行位置交换 
    int temp = *a;  
    *a = *b;
    *b = temp;
}
//选择排序
void Selection_sort(int arr[], int len)
{
    int i,j;//定义变量i,j

        for (i = 0 ; i < len - 1 ; i++)
    {
                int min = i;  //定义i的位置 为最小值
                for (j = i + 1; j < len; j++) //遍历未排序的元素
                        if (arr[j] < arr[min])//比较判断找到目前最小值,此处为升序的实现 
                                min = j;    //记录最小值
                Swap(&arr[min], &arr[i]);    //元素位置交換
        }
}
int main() {
        int a[] = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
        int len = (int)sizeof(a)/sizeof(*a);
        //调用选择排序函数进行排序
        Selection_sort(a, len);
        int i;
        //循环输出排序后的结果:
        for (i = 0; i < len; i++)
            printf("%d ", a[i]);
        return 0;
}

if (arr[j] < arr[min])//比较判断找到目前最小值,此处为升序的实现 如果想改为降序 只需将 < 号改为 > 号。


三、输出结果展示

1.输出结果:
2 3 4 5 15 19 26 27 36 38 44 46 47 48 50
--------------------------------
Process exited after 0.3754 seconds with return value 0
请按任意键继续. . .
2.输出结果(图示版):

在这里插入图片描述


四、选择排序gif动画:

在这里插入图片描述

五、流程分析

1.读题

给定数组元素为:3,44,38,5,47,15,36,26,27,2,46,4,19,50,48。使用选择排序对其进行升序排序。关键点 ①给定元素内容 ②选择排序 ③升序排序

2.构思

==①==根据第一个关键点==给定元素内容==,可以先定义一个整数类型的数组对其进行存储,方便后续使用循环对其进行操作。
==②==第二个关键点就是==选择排序==(介绍见注释),使用选择排序,主要就是明白其原理与思想,借助循环比较两个数值之间的比较、进而实现位置的交换,这一点与冒泡是很相似的,其实区别就在于算法步骤,首先先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。重复第二步,直到所有元素均排序完毕。
==③==第三个关键点==升序排序==,那就是让数值大的放后边,数值小的放前边,所以升序排序借助循环排序的话,需要加一个判断语句,a[j] < a[min],比较元素a[i]和更新的最小值a[min]进行比较,如果该元素小于后者,进行最小值标记记录,然后进行传参交换。
解决了这些,可以尝试实现一下了。

选择排序(Selection sort)的介绍:

①选择排序(Selection sort)是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。

②优势:不占用额外的内存空间。

③算法步骤:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。重复第二步,直到所有元素均排序完毕。

3.代码

把你所思所想,以代码的形式,写出来。

ps:这道题的方法,本文虽然只写出这一种,但是思路方法其实不止这一种,其它的方法可自行尝试一下。


作者:Code_流苏(一个喜欢古诗词和编程的Coder😊)

★喜欢的话,还请多多点赞与关注! 感谢支持!
C语言百题练习专栏计划持续进行,欢迎评论交流学习!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。