解析
白话:排序方式可以有好几种,
- 第一种:我们可以通过左右两个比较大小然后进行换位子就可以初步得到结果,那就是多来几次就好了。(冒泡排序)
- 第二种:就是我们把第一个值找到位置然后再继续第二个值。这样子也是一种 办法。(选择排序)
选择排序
看看逐行比较的办法:
#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值,不是判断
i
和j
以后直接换两个的位置而且是先赋值给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);
}
就先解析到这里,有问题记得留言,会及时修改的。
以后还会逐步完善的。