您好,欢迎来到外链网!
当前位置:外链网 » 站长资讯 » 专业问答 » 文章详细 订阅RssFeed

用c语言实现选择排序,选择排序 C语言

来源:互联网 浏览:77次 时间:2023-04-08

选择排序是在每一轮比较中不是每当a[i]<a[j]时候就交换,而是用一个变量k记下其中较小的元素的下标值,在a[i]与a[i+1]~a[n]全部进行比较后,只将a[i]与a[i+1] ~ a[n]中最小的值进行交换,为此每一轮只需要将a[i]与a[k]的值进行交换即可。
设有n个数据存储到从a[0]~ a[n+1]的n个数组元素中,则选择排序过程分为如下n-1步骤:
第一步:在第1~n个数中找出最小者,然后与第一个数进行比较,前1个数排好序
第二步:在第2~n个数中找出最小者,然后与第二个数进行交换,前2个数排好序

第n-1步:在第n-1 ~ n个数中找出最小者,然后与第n-1个数进行交换,排序结束
算法分析:
n个待排序的数据分别存放在一维数组中,外层循环是次数循环,循环控制变量i依次取值0~ n-2,对应第1步~ 第n-1步。循环体是在a[i] ~ a[n-1]中寻找最小的值及其下标,找到后与a[i]交换。
代码如下:

#include <stdio.h>void main(){ int i,j,k,n,temp,a[200]; printf("请输入需要排序的数据个数\n"); scanf("%d",&n);// 从键盘输入待排序的数据个数for(i=0;i<n;i++){ // 利用for循环依次将输入的数据放置在数组中scanf("%d",&a[i]);}for(i=0;i<n-1;i++){// 外层循环 变量i控制排序总共进行n-1轮k=i;for(j=i+1;j<n;j++){ //内层循环 变量j控制每轮进行比较的次数if(a[j]<a[k]){k=j; //k记录每轮比较中的最小者的下标if(k!=i){ //将第i轮的最小者,与a[i]交换temp=a[i];a[i]=a[k];a[k]=temp;}}}}printf("排序后的数据如下:\n");for(i=0;i<n;i++){ // 利用for循环进行输出printf("%d\t",a[i]);}} 00686932