C语言白话数组排序

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 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语言数组排序
129 0
|
存储 C语言
《C语言及程序设计》实践参考——动态数组排序
返回:贺老师课程教学链接 【项目2-动态数组排序】编一个程序,输入某班某门课的成绩,进行排序后输出。成绩可能为小数。班级人数不定,要求采用动态数组完成。在下面代码基础上完成#include&lt;stdio.h&gt; #include&lt;malloc.h&gt; int main() { int count, i,j; float *pf;
1156 0
|
15天前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
36 10
|
15天前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
37 9
|
15天前
|
存储 Unix Serverless
【C语言】常用函数汇总表
本文总结了C语言中常用的函数,涵盖输入/输出、字符串操作、内存管理、数学运算、时间处理、文件操作及布尔类型等多个方面。每类函数均以表格形式列出其功能和使用示例,便于快速查阅和学习。通过综合示例代码,展示了这些函数的实际应用,帮助读者更好地理解和掌握C语言的基本功能和标准库函数的使用方法。感谢阅读,希望对你有所帮助!
30 8
|
15天前
|
C语言 开发者
【C语言】数学函数详解
在C语言中,数学函数是由标准库 `math.h` 提供的。使用这些函数时,需要包含 `#include <math.h>` 头文件。以下是一些常用的数学函数的详细讲解,包括函数原型、参数说明、返回值说明以及示例代码和表格汇总。
39 6
|
15天前
|
存储 C语言
【C语言】输入/输出函数详解
在C语言中,输入/输出操作是通过标准库函数来实现的。这些函数分为两类:标准输入输出函数和文件输入输出函数。
90 6
|
15天前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
47 6
|
15天前
|
C语言 开发者
【C语言】断言函数 -《深入解析C语言调试利器 !》
断言(assert)是一种调试工具,用于在程序运行时检查某些条件是否成立。如果条件不成立,断言会触发错误,并通常会终止程序的执行。断言有助于在开发和测试阶段捕捉逻辑错误。
23 5