C语言中冒泡排序,插入排序,选择排序

c语言数组选择排序例题,C语言数组排序——冒泡排序、选择排序、插入排序 一、冒泡排序原理解析:(以从小到大排序为例)在一排数字中,将第一个与第二个比较大小,如果后面的数比前面的小,则交换他们的位置。然后比较第二、第三个……直到比较第n-1个和第n个,此时,每一次比较都将较大的一个数往后移动,所以第n个数是所有数中最大的一个。之后再重复以上过程,直到将所有数据按从小到大顺序排列好。编程实现:通过两个嵌套的循环实现。外层循环执行一次,内层循环执行一遍。其中,内层循环控制比... 阅读详情
掌握好常用的排序算法,在实际的项目开发中可以节省很多的时间。每一种排序算法在执行的效率上是存在差别的,这些微小的时间差,也许在平常的联系当中感觉不到,但是涉及到数据量比较大或者是在资源比较紧张的系统中就显得尤其的重要,比如嵌入式系统。下面简要介绍三种常用的排序算法以及他们的执行效率的比较。

       冒泡排序:

       思路:将相邻的两个数比较,将较小的数调到前头;有n个数就要进行n-1趟比较,第一次比较中要进行n-1次两两比较,在第j趟比较中,要进行n-j次两两比较。

       实现代码:

      

点击(此处)折叠或打开

  1. void BublleSort (int arr [], int count)
  2.     {
  3.         int i, j, temp;
  4.         for(j=0; j<count-1; j ) /* 冒泡法要排序n-1次*/
  5.             for(i=0; i<count-j-1; i )/* 值比较大的元素沉下去后,只把剩下的元素中的最大值再沉下去就可以啦 */
  6.             {
  7.                 if(arr[i]>arr[i 1])/* 把值比较大的元素沉到底 */
  8.                 {
  9.                     temp=arr[i 1];
  10.                     arr[i 1]=arr[i];
  11.                     arr[i]=temp;
  12.                 }
  13.             }
  14.     }


       插入排序:

       思路:在得到要排序的数组以后,讲数组分为两个部分,数组的第一个元素为一个部分,剩下的元素为一部分,然后从数组的第二个元素开始,和该元素以前的所有元素比较,如果之前的元素没有比该元素大的,那么该元素的位置不变,如果有元素的值比该元素大,那么记录相爱他所在的位置;例如I,该元素的位置为k,则将从i到k位置上的所有元素往后移动一位,然后将k位置上的值移动到i位置上。这样就找到了K所在的位置。每一个元素都这样进行,最终就会得到排好顺序的数组。

       实现代码:

        

点击(此处)折叠或打开

  1. void InsertSort ( int arr[],int count)
  2.     {
  3.             int i,j,temp;
  4.         for(i=1; i<count; i )//数组分两个部分,从第二个数组元素开始
  5.         {
  6.             temp = arr[i];//操作当前元素,先保存在其它变量中
  7.             for(j=i-1; j>-1&&arr[j]>temp;j--)//从当前元素的上一个元素开始查找合适的位置,一直查找到首元素
  8.             {
  9.                 arr[i] = arr[j];
  10.                 arr[j] = temp;
  11.             }
  12.     }
  13. }


 

              选择排序:

       思路:

       首先以一个元素为基准,从一个方向开始扫描,比如从左到右扫描,以A[0]为基准,接下来从A[0]….A[9]中找出最小的元素,将其与A[0]交换。然后将其基准位置右移一位,重复上面的动作,比如,以A[1]为基准,找出A[1]~A[9]中最小的,将其与A[1]交换。一直进行到将基准位置移到数组最后一个元素时排序结束。

       实现代码:

                

点击(此处)折叠或打开

  1. void SelectSort(int arr[], int count)
  2.     {
  3.         int i,j,min,temp;
  4.         for(i=0; i<count; i )
  5.             {
  6.             min = arr[i];//以此元素为基准
  7.             for(j=i 1; j<count; j )//从j往前的数据都是排好的,所以从j开始往下找剩下的元素中最小的
  8.             {
  9.                 if(min>arr[j])//把剩下元素中最小的那个放到arr[j]中
  10.                 {
  11.                     temp = arr[j];
  12.                     arr[j] = min;
  13.                     min = temp;
  14.                 }
  15.             }
  16.         }
  17.     }


      

       效率比较:

       为了能够更加明显的查看其效果,将每个排序算法执行10000次。下面是测试程序主函数:

     

1.#include <stdio.h>

2.#include<stdlib.h>

3.#include <sys/time.h>

4.#include <unistd.h>

5.

6.#define MAX 6

7.

8.int array[MAX];

9.int count = MAX;

10.

11./********创建数组,并输入元素************/

12.void BuildArray()

13.{

14.    int a,i=0;

15.    printf("请输入数组元素: ");

16.    for(; i<count; i )

17.    {

18.        scanf("%d", &a);

19.        array[i] = a;

20.    }

21.    printf("\n");

22.}

23./**********遍历输出数组元素*************/

24.void Traverse(int arr[], int count)

25.{

26.    int i;

27.    printf("数组输出: ");

28.    for(i=0; i<count; i )

29.        printf("%d\t", arr[i]);

30.    printf("\n");

31.}

32.void BublleSort(int arr[], int count)

33.{

34.    int i,j,temp;

35.    for(j=0; j<count-1; j ) /* 气泡法要排序n-1次*/

36.        for(i=0; i<count-j-1; i )/* 值比较大的元素沉下去后,只把剩下的元素中的最大值再沉下去就可以啦 */

37.        {

38.            if(arr[i]>arr[i 1])/* 把值比较大的元素沉到底 */

39.            {

40.                temp=arr[i 1];

41.                arr[i 1]=arr[i];

42.                arr[i]=temp;

43.            }

44.        }

45.}

46.

47.void InsertSort(int arr[],int count)

48.{

49.    int i,j,temp;

50.    for(i=1; i<count; i )//数组分两个部分,从第二个数组元素开始

51.    {

52.        temp = arr[i];//操作当前元素,先保存在其它变量中

53.        for(j=i-1; j>-1&&arr[j]>temp;j--)//从当前元素的上一个元素开始查找合适的位置,一直查找到首元素

54.        {

55.            arr[i] = arr[j];

56.            arr[j] = temp;

57.        }

58.    }

59.}

60.

61.void SelectSort(int arr[], int count)

62.{

63.    int i,j,min,temp;

64.    for(i=0; i<count; i )

65.    {

66.        min = arr[i];//以此元素为基准

67.        for(j=i 1; j<count; j )//从j往前的数据都是排好的,所以从j开始往下找剩下的元素中最小的

68.        {

69.            if(min>arr[j])//把剩下元素中最小的那个放到arr[j]中 

70.            {

71.                temp = arr[j];

72.                arr[j] = min;

73.                min = temp;

74.            }

75.        }

76.    }

77.}

78.

79.int main()

80.{ 

81.    int i;

82.    struct timeval tv1,tv2;

83.    struct timezone tz;

84.    BuildArray();//创建数组

85.    Traverse(array, count);//输出最初数组

86.    gettimeofday(&tv1,&tz);

87.    for(i=0;i<10000;i++)

88.        BublleSort(array, count);//冒泡排序

89.    gettimeofday(&tv2,&tz);

90.    printf("%d:%d/n",tv2.tv_sec-tv1.tv_sec,tv2.tv_usec-tv1.tv_usec);

91.    Traverse(array, count);//输出排序后的数组

92.    

93.    gettimeofday(&tv1,&tz);

94.    for(i=0;i<10000;i++)

95.        InsertSort(array, count);//插入排序

96.    gettimeofday(&tv2,&tz);

97.    printf("%d:%d/n",tv2.tv_sec-tv1.tv_sec,tv2.tv_usec-tv1.tv_usec);

98.    Traverse(array, count);//输出排序后的数组

99.     

100.    gettimeofday(&tv1,&tz);

101.    for(i=0;i<10000;i++)

102.        SelectSort(array, count);//插入排序

103.    gettimeofday (&tv2,&tz);

104.    printf("%d:%d/n",tv2.tv_sec-tv1.tv_sec,tv2.tv_usec-tv1.tv_usec); 

105.    Traverse(array, count);//输出排序后的数组

106.    return 0;

107.}


 

编译:gcc –g –Wall sort_test.c –o sort_test

运行:./sort_test

结果如下:

                    

通过多次测试,插入排序的速度最快。

C语言<选择排序><冒泡排序><插入排序><快速排序>介绍以及代码 C语言介绍以及代码 阅读详情

相关推荐

C语言:编写查找和排序函数(二分查找,冒泡排序,选择排序法,插入排序)

任务代码:二分查找数组的一个数字:(函数法)#include &lt;stdio.h&gt; int binarySearch(int a[],int len,int key) { int low=0,high=len-1,mid; int i=-1;//相当于index while(low&lt;=high) { mid=(low+high)/2;...

Geek宝宝的努力! 4381

c语言中冒泡排序、插入排序、选择排序算法比较

掌握好常用的排序算法,在实际的项目开发中可以节省很多的时间。每一种排序算法在执行的效率上是存在差别的,这些微小的时间差,也许在平常的联系当中感觉不到,但是涉及到数据量比较大或者是在资源比较紧张的系统中就显得尤其的重要,比如嵌入式系统。下面简要介绍三种常用的排序算法以及他们的执行效率的比较。        冒泡排序:        思路:将相邻的两个数比较,将较小的数调到前头;有n个数就要进行n

清风雨溪的博客 2140

冒泡排序、插入排序、选择排序的多种语言实现(c/c++/python/java)

冒泡排序的c/c++/python/java代码实现

fang 0 jun的博客 978

C语言冒泡排序法(从小到大)

#include&lt;stdio.h&gt; int main() { int i,j,t,a[10]; for(i=0;i&lt;10;i++) scanf("%d",&amp;a[i]); for(j=0;j&lt;9;j++) for(i=0;i&lt;9-j;i++) if(a[i]&gt;a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} for(i=0;i&...

qq_42778026的博客 3万+

Sony SLVS-EC接口实战:如何用Xilinx K7 FPGA接收IMX421传感器数据(附电气特性匹配技巧)

本文详细介绍了在Xilinx Kintex-7 FPGA平台上实现Sony IMX421图像传感器SLVS-EC接口数据接收的完整实战方案。内容涵盖从硬件选型、PCB布局的电气特性匹配技巧,到FPGA内部GTX收发器配置、多通道绑定以及SLVS-EC协议数据解析与图像重组的关键步骤,为高速视觉系统开发提供了宝贵的调试经验和系统集成指导。

efc12345678的博客 262

从零到一:3D Slicer与MONAI在医学影像中的AI革命

本文探讨了3D Slicer与MONAI在医学影像分析中的革命性应用,展示了如何通过开源工具实现高效的三维影像处理和AI增强分析。结合临床案例,详细介绍了从数据准备到AI分析的全流程,显著提升诊断效率和精度,推动医学影像技术迈向新纪元。

tcp8optimizer的博客 340

排序算法(选择+冒泡+插入排序 C#代码编写)

选择排序、冒泡排序、插入排序,使用C#代码编写

weixin_51565051的博客 276

零基础也能搞定!华为USG6000V防火墙WEB管理界面开启教程

本文详细介绍了华为USG6000V防火墙WEB管理界面的开启教程,从环境准备、网络配置到防火墙初始化,逐步指导用户完成图形化管理界面的搭建。特别适合零基础用户快速掌握企业级防火墙的可视化操作,提升安全管理效率。

grape的博客 786

C语言经典100例冒泡选择排序

#include<stdio.h> int main(){ int a[6]={4,2,1,5,3,6}; int i,j,t; for(i=0;i<6;i++){ for(j=0;j<5-i;j++){ if(a[j]>a[j+1]){ t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } for(i=0;i<6;i++){ printf("%d ",a[i]); } printf("\n

weixin_42149569的博客 361

【processing】创意编程

首先接到这个作业的时候,我是很崩溃的,我是真的不会画画QAQ,还画自己,这也太难了,于是我决定!还是祸害我爱豆吧!于是我从微博太太那里找了个图临摹 下面是太太的图 先给太太道歉!都是为了作业! 然后我画出来是这样子的 还可以!!!没有特别丑!(虽然也不是特别像吧) 但是画这个真是画死我了,下面贴上代码吧,没啥特殊的就是各种贝塞尔曲线各种圆各种线 //face stroke(70,27,11...

qq_25700571的博客 1267

从零到一:构建嵌入式Nginx的模块化架构与跨平台部署实战

本文详细介绍了在ARM32架构的RV1126嵌入式设备上,通过交叉编译技术构建模块化Nginx服务器的完整实战流程。涵盖环境配置、依赖库编译、Nginx核心与http_ssl_module等模块集成、性能优化及部署调试,为嵌入式开发提供高效可靠的Web服务器解决方案。

rock5的博客 202

选择排序(c语言)

目录 一、什么是选择排序? 二、选择排序思路 三、排序过程 四、代码的实现 一、什么是选择排序? 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的中数据元素选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 二、选择排序思路 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置.

m0_59083833的博客 11万+

CentOS7 内核升级

可在http://ftp.sjtu.edu.cn/sites/elrepo.org/linux/kernel/el7/x86_64/RPMS选择对应架构平台不受影响的内核版本文件下载,然后离线安装,也可通过yum下载包后进行安装。通过 #uname -sr ,可以看到当前的内核版本 Linux 3.10.0-1160.el7.x86_64。首先找台能访问互联网的机器,通过联网的机器进行内核包下载。lt:longterm的缩写:长期维护版;ml:mainline的缩写:最新稳定版;

Jian Sun_的博客 601

C语言排序(冒泡排序、选择排序、插入排序和快速排序)

C语言排序(冒泡排序、选择排序、插入排序和快速排序)C语言排序什么是排序?1.冒泡排序基本思想主要思路:动态示例demo2.选择排序基本思想主要思路动态示例demo3.插入排序基本思想主要思路动态示例demo4.快速排序基本思想主要思路动态示例demo C语言排序 什么是排序? 就是将无序的变成有序的 1.冒泡排序 基本思想 在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,

weixin_47932709的博客 4万+

自动权重化图卷积网络(Auto-Weighted GCN)算法在反洗钱识别中的应用及代码实现

该算法通过自动学习节点之间的权重信息,能够更好地捕捉AML数据中的关系和结构,从而提高反洗钱识别的准确性和效果。传统的AML识别方法通常依赖于专家定义的规则和手动提取的特征,但这些方法在应对大规模和复杂的数据时存在一定的局限性。GCN通过在图上执行卷积操作来捕捉节点之间的关系和结构信息,从而实现对图数据的学习和表示。自动权重化图卷积网络是一种基于GCN的改进算法,能够自动学习节点之间的权重信息,从而更好地捕捉图中的关系。利用自动计算的权重值执行图卷积操作。根据节点之间的相似度,计算每个节点的权重。

syntax_api860的博客 376

2025 华为OD机试真题e卷 C语言 实现【竖直四子棋】

竖直四子棋的棋盘是竖立起来的,双方轮流选择棋盘的一列下子,棋子因重力落到棋盘底部或者其他棋子之上,当一列的棋子放满时,无法再在这列上下子。

MISAYAONE的博客 1415

详解C语言的四种排序:冒泡排序、选择排序、插入排序、快速排序

C语言中有三种经典的简单排序:选择排序、冒泡排序、插入排序以及快速排序。总结一下这四种排序。

m0_73613541的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C语言实例——四种排序算法(冒泡排序、选择排序、插入排序、快速排序)

C 语言排序算法BB Time一、冒泡排序1、原理2、代码二、选择排序1、原理2、代码三、插入排序1、原理2、代码四、快速排序1、原理2、代码 代码均以按从小到大排序为例 只写出来了排序的函数,减少博客冗余内容 BB Time 这个学期开了数据结构的课程,需要用到 C 语言,但是颓废太久感觉已经忘的差不多了。再加上有学弟(妈呀,我才上了四个月大一就已经成学长了????)来问我排序算法,所以把之前的博客重新整理下,当作复习,也希望能帮到刚开始学 C 语言的小伙伴们。 一、冒泡排序 1、原理 2、代码 vo

KANGYICHEN1的博客 3461

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

c语言实现冒泡排序,选择排序,插入排序,三种基础排序算法

冒泡排序是最基础的算法,他是怎么实现的呢,看这一排数据,我们要让他完成升序,也就是让87631变成13678冒泡排序是一步一步往下走的先是第一次排序,8,跟后面的4个数排序,8<7 交换,变成7 8 6 3 1;从8开始比6<8 交换,变成7 6 8 3 1;还是从8开始3<8 交换,变成7 6 3 8 1;从8开始1<8 交换,变成7 6 3 1 8;这样就完成了第一次排序我们的8成功走到了最后第二次排序7<6 交换,变成6 7 3 1 8;从7开始3<7 交换,变成6 3 7 1 8。

2301_79083481的博客 1395

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C语言实现冒泡排序,选择排序和插入排序

C语言实现冒泡排序,选择排序和插入排序 #include<stdio.h> /*冒泡排序*/ int BubbleSort(int *array,int num) { int i=0,j=0,n=0; for(i=0;i<num;i++) for(j=0;j<num-1;j++) if(array[j]>array[j+1]) { array[j]=array[j]+array[j+1]; array[j+1]=array[j]-array[j+1]

msdn_yyhh的博客 501

C语言冒泡排序&选择排序&插入排序

// 冒泡排序 从小到大 void bubbleSort(int a[], int len) { int i, j, temp, count1 = 0, count2 = 0; for (i = 0; i < len; i++) { for (j = 0; j < len - i - 1; j++) { count1++; ...

KyrieCao的博客 729

C语言单链表的3种排序算法,插入排序,冒泡排序,选择排序

C语言单链表的3种排序算法,插入排序,冒泡排序,选择排序。

fengjunwang1980的专栏 1万+

【C语言】冒泡排序,选择排序,插入排序

冒泡排序,选择排序,插入排序

LX18792732127的博客 659

C语言冒泡排序、插入排序、简单选择排序、快速排序算法

冒泡排序算法 时间复杂度O(n^2) 空间复杂度(1) #include "stdio.h" void swap(int *t1, int *t2) { int temp; temp = *t1; *t1 = *t2; *t2 = temp; } void bubbleSort(int a[], int len) { int i,j,t; for(i=0;i<len-1;i++) { for(j=0;j<len-1-i;j++) { if(a[j]>a[j+1

qq_43216593的博客 791

C语言排序算法:冒泡排序,选择排序,插入排序

写了一下排序算法,冒泡,选择,插入,思路写在注释里了,仅供参考。 #include<stdio.h> int a[10] = {1,48,12,16,13,19,34,24,26,36}; int b[10]; void bubble_sort(int a[],int n)//冒泡排序 { int temp; for(int i=0;i<n-1;i++)//比较的轮数 { for(int j=i;j<n-1-i;j++)//由于下面是a[j+1]和a[j]比较,所以这里

nf213的博客 460

C语言——冒泡排序、选择排序、插入排序、折半查找

废话不多说直接上代码,注释都写了,基本没有难以理解的地方,前提是有基础的人来复习。 #include<stdio.h> #include<stdlib.h> void bubblesort(int a[],int len); void insertsort(int a[],int len); void selectsort(int a[],int len); int halfIntervalsearch(int a[],int len,int num); void printFun

weixin_44436319的博客 582
上一篇: Java Hex 16进制的 byte String 转换类 .
下一篇: java 对象之间属性值复制
豆丁
博客等级 码龄14年 8粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值