选择排序法(DEV-C++)

(个人理解,学习自用)

一、原理

1,将第一个数和后面所有数进行比较。

2,如果大小不是我们需要的顺序就交换他们的位置。

3,将1,2循环进行直至排序正确。

二、理解

 如图,这一串数字(i,j,k,都代表数组角标),我们用三个变量来标记他们,i是每一轮开始被比较的数(也是每一轮最小数放置的位置)。j用来遍历后续数字和i作比较。k作为一个中间变量,作用是记住j遍历的数中最小的那位数k需要和i从同一位置开始,因为i有可能就是这一轮的最小值)。每一轮将当轮的最小值k与最小值需要被放置的位置i做交换,重复,直至完成排序。

#include <stdio.h>
int a[10] = {3,24,5,8,1,66,2,9,4,0};
int main() {
	int i,j,t;
	for (i = 0;i<10;i++) {
		int k = i;//K为中间变量,用来记住循环中比所比较数更小的数。 
		for (j = i+1;j<10;j++) {
			//每次排序后将当轮最小值换到前面,所以j只需从已排过序的后一位进行寻找。
			if (a[j]<a[k])  
			k = j;  //若被比较的数更小就将K更新,保证K为最小值。
			t = a[i], a[i]=a[k], a[k]=t;
		}
	}
	for (i = 0;i<10;i++)//将排好序的一串数输出
	printf ("%d ",a[i]);
	return 0;
}

 参考b站up Cukor丘克

三、例题 

 

#include <stdio.h>
int a[100];
int main() {
    int i,j,k,t,n;
    scanf ("%d",&n);
    for (i = 0;i<n;i++)
    scanf ("%d",&a[i]);
    for (i = 0;i<n-1;i++) {
        k = i;//将i的值赋给k,用作计比要排序的数小的数
        for (j = i+1;j<n;j++)
            if (a[j]<a[k]) {
                k = j;
            }
            t = a[k];a[k]=a[i];a[i]=t;
            //交换的步骤需要写在if外,因为需要输出的是交换一步的结果
             printf ("step %d: ",i+1);
            for (j = 0;j<n;j++) {
                //这里变量字母不能为i,因为这里还在i的循环里,需要用别的字母
                //而j在上个循环已经结束可以使用不会影响,也可以再定义一个新字母
              printf ("%d ",a[j]);
            }
            puts ("");
    }
    printf ("sorted array: ");
    for (i = 0;i<n;i++)
        printf ("%d ",a[i]);
    return 0;
}

注意

             if,for都默认控制一条语句

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值