C语言白话数组排序

C语言白话数组排序

解析

白话:排序方式可以有好几种,

  • 第一种:我们可以通过左右两个比较大小然后进行换位子就可以初步得到结果,那就是多来几次就好了。(冒泡排序)
  • 第二种:就是我们把第一个值找到位置然后再继续第二个值。这样子也是一种 办法。(选择排序)

选择排序

看看逐行比较的办法:

#include<stdio.h>
main(){
	int i,j,t,num[10],n=10;
	for(i=0;i<n;i++){
		scanf("%d",&num[i]); // 循环输入值
	}
	for(i=0;i<n-1;i++){  // 循环n-1次
		for(j=i+1;j<n;j++){  // 嵌套循环
			if(num[i]>num[j]){  // 比较i和j位置上的数据大小
			// 成立就替换
				t=num[i];
				num[i]=num[j];
				num[j]=t;
			}
		}
	}
	for(i=0;i<n;i++){  // 输出
		printf("%5d",num[i]);
	}
	printf("\n");		
}	

自定义函数实现(稍微调整)

#include<stdio.h>
int array_sort1(int num[],int n){  // 数组排序函数
    /*
     * num[]:输入的数据num数组
     * n:数组的长度
     */
	int i,j,t;
	for(i=0;i<n-1;i++){
		for(j=i+1;j<n;j++){
			if(num[i]>num[j]){
				t=num[i];
				num[i]=num[j];
				num[j]=t;
			}
		}
	}
	for(i=0;i<n;i++){
		printf("%5d",num[i]);
	}
	printf("\n");	
}

main(){  // 主函数
	int i,num[10],n=10;
	for(i=0;i<n;i++){
		scanf("%d",&num[i]);
	}
	array_sort1(num,n);	
}	

白话解析:

首先就是使用for循环得到输入
然后调用函数得到结果
函数内容:
输入函数的是:数组和数组长度n
嵌套循环分别循环n-1
i代表的是第i个到n-1
j代表的是第i+1个到n
也就是前一个和后一个进行比较
比较后小的在前大的在后

对上面的数据稍微调整一下

#include<stdio.h>
main(){
	int i,j,t,num[10],n=10,k;
	printf("输入10个待排序的数据\n");
	for(i=0;i<n;i++){
		scanf("%d",&num[i]); // 循环输入值
	}
	for(i=0;i<n-1;i++){  // 循环n-1次
	    k=i;
		for(j=i+1;j<n;j++){  // 嵌套循环
			if(num[k]>num[j]){  // 比较i和j位置上的数据大小
			// 成立就替换
			k=j;	
			}
			t=num[i];
			num[i]=num[k];
			num[k]=t;
		}
	}
	for(i=0;i<n;i++){  // 输出
		printf("%5d",num[i]);
	}
	printf("\n");		
}	

唯一的区别就是添加了一个k值,不是判断ij以后直接换两个的位置而且是先赋值给k这样就可以先交换地址,待确定最后位置以后再一次到位。
(函数形式就不展示了)

冒泡排序

看代码

#include<stdio.h>
main(){
	int i,j,t,num[10],n=10,k;
	printf("输入10个待排序的数据\n");
	for(i=0;i<n;i++){
		scanf("%d",&num[i]); // 循环输入值
	}
	for(i=0;i<n-1;i++){  // 循环n-1次
		for(j=0;j<n-i;j++){  // 嵌套循环
			if(num[j]>num[j+1]){  // 比较j和j+1位置上的数据大小
			// 成立就替换
			t=num[j];
			num[j]=num[j+1];
			num[j+1]=t;
			}
		}
	}
	for(i=0;i<n;i++){  // 输出
		printf("%5d",num[i]);
	}
	printf("\n");		
}	

解析:

和前面的解析差不多就是一个循环的地方不一样
之前是循环两个一样的长度,都是n-1
现在第一个循环的是n-1
第二个随着第一次的循环而递减
也就是两个数比较的越来越多,最后的结果已经定型 不需要定义这么多次。

函数形式:

#include<stdio.h>
int array_sort2(int num[],int n){
	int i,j,t;
	for(i=0;i<n-1;i++){  // 循环n-1次
		for(j=0;j<n-i;j++){  // 嵌套循环
			if(num[j]>num[j+1]){  // 比较j和j+1位置上的数据大小
			// 成立就替换
			t=num[j];
			num[j]=num[j+1];
			num[j+1]=t;
			}
		}
	}
	for(i=0;i<n;i++){  // 输出
		printf("%5d",num[i]);
	}
	printf("\n");		
}
main(){
	int i,j,t,num[10],n=10,k;
	printf("输入10个待排序的数据\n");
	for(i=0;i<n;i++){
		scanf("%d",&num[i]); // 循环输入值
	}
	array_sort2(num,n);
}	

就先解析到这里,有问题记得留言,会及时修改的。
以后还会逐步完善的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三岁学编程

感谢支持,更好的作品会继续努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值