vlambda博客
学习文章列表

排序算法1:选择排序-C语言实现


 写在前面


排序是敲代码时最容易碰到的步骤,今天笔者先来梳理一下最常用也是最简单的选择排序算法。



01    代码说明



运行环境:Manjaro Linux 19.0

编辑器:vscode

编译器:gcc

实现语言:C语言

功能描述:对10个数字,从大到小排序,数字之间

                  以空格隔开

运行截图:




02    代码



#include<stdio.h>void selectSort(int *);int main(){ int num[10];
for(int i=0;i<10;i++){ scanf("%d",&num[i]); } selectSort(num); for(int i=0;i<10;i++){        printf("%d",num[i]);        if(i!=9){  //最后一个数字之后没有空格 printf(" "); } } return 0;}void selectSort(int *num){ int k,temp;
for(int i=0;i<10;i++){ k=i; for(int j=k+1;j<10;j++){ if(num[j]>num[k]){ k=j; } } temp=num[i]; num[i]=num[k]; num[k]=temp; }}



03     分析



思路:
一共10个数字假设前i个数字已经有序,则对第i+1个数字到第10个数字进行遍历,找出这10-i个数字中的最大值,使其与第i+1个数字互换位置

注意:
有个小细节,一开始笔者是先保存下第i+1个值,遍历过程中遇到比它大的就交换他们的位置。这样每个内循环都会进行多次的数据交换,如果先用k记录下第i+1个数字的下标,遍历过程中遇到比它大就用较大者的下标更新k值,在遍历结束之后再进行位置交换,这样就避免了频繁的交换操作,每个内循环只需要进行一次位置交换。