C语言白话数组排序

本文涉及的产品
云解析 DNS,旗舰版 1个月
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
简介: 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);
} 


就先解析到这里,有问题记得留言,会及时修改的。

以后还会逐步完善的。

目录
相关文章
|
搜索推荐 C语言
c语言-数组排序算法-冒泡法排序
冒泡法顺序指的是在排序时,从前往后扫描待排序记录,每次比较数组中相邻的两个数组元素的值,将较小的数(按从小到大排列)排在较大的数前面。
c语言-数组排序算法-冒泡法排序
|
C语言
【蓝桥杯】~C语言数组排序
【蓝桥杯】~C语言数组排序
110 0
|
存储 C语言
《C语言及程序设计》实践参考——动态数组排序
返回:贺老师课程教学链接 【项目2-动态数组排序】编一个程序,输入某班某门课的成绩,进行排序后输出。成绩可能为小数。班级人数不定,要求采用动态数组完成。在下面代码基础上完成#include&lt;stdio.h&gt; #include&lt;malloc.h&gt; int main() { int count, i,j; float *pf;
1135 0
|
16小时前
|
C语言
C语言prinf函数
C语言prinf函数
10 4
|
1天前
|
C语言
【海贼王编程冒险 - C语言海上篇】库函数怎样模拟实现?
【海贼王编程冒险 - C语言海上篇】库函数怎样模拟实现?
5 1
|
1天前
|
C语言
【C语言基础篇】字符串处理函数(四)strcmp的介绍及模拟实现
【C语言基础篇】字符串处理函数(四)strcmp的介绍及模拟实现
|
1天前
|
存储 C语言
【C语言基础篇】字符串处理函数(三)strcat的介绍及模拟实现
【C语言基础篇】字符串处理函数(三)strcat的介绍及模拟实现
|
1天前
|
C语言
【C语言基础篇】字符串处理函数(二)strcpy的介绍及模拟实现
【C语言基础篇】字符串处理函数(二)strcpy的介绍及模拟实现
|
1天前
|
C语言
【C语言基础篇】字符串处理函数(一)strlen的介绍及模拟实现
【C语言基础篇】字符串处理函数(一)strlen的介绍及模拟实现
|
1天前
|
存储 缓存 移动开发
【C语言基础篇】scanf()函数详解
【C语言基础篇】scanf()函数详解