C语言实现选择排序
Posted G_whang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言实现选择排序相关的知识,希望对你有一定的参考价值。
选择排序是在每一轮比较中不是每当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]);
以上是关于C语言实现选择排序的主要内容,如果未能解决你的问题,请参考以下文章