返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c语言冒泡排序和选择排序的使用代码
  • 939
分享到

c语言冒泡排序和选择排序的使用代码

2024-04-02 19:04:59 939人浏览 安东尼
摘要

目录1.冒泡排序2.选择排序区别总结1.冒泡排序 冒泡排序将一个列表中的两个元素进行比较,并将最小的元素交换到顶部。两个元素中较小的会冒到顶部,而较大的会沉到底部,该过程将被重复执行

1.冒泡排序

冒泡排序将一个列表中的两个元素进行比较,并将最小的元素交换到顶部。两个元素中较小的会冒到顶部,而较大的会沉到底部,该过程将被重复执行,直到所有元素都被排序。

冒泡排序示意图

以如图所示的冒泡排序为例,每次比较相邻的两个值,值小的交换到前面,每轮结束后值最大的数交换到了最后。第一轮需要比较4次;第二轮需要比较3次;第三轮需要比较2次;第四轮需要比较1次。

那么如何用二重循环将5个数排序呢?5个数存放在一维数组中,外层循环控制比较多少轮,循环变量i;内层控制每轮比较多少次,循环变量就,如下图所示:

代码如下:

#include <stdio.h>
#define NUM 5
void arrsort(int[],int);
void arrout(int[],int);
 main(){
	 int a[NUM]={16,25,9,90,23};
	 arrout(a,NUM);//输出a数组中原始数据
	 arrsort(a,NUM);//对a数组中的数进行排序
     arrout(a,NUM);//输出排序后a数组中的数据
}
void arrsort(int a[],int n){
	for(int i=0;i<n-1;i++){
		for(int j=0;j<n-1-i;j++){
			if(a[j]>a[j+1]){ 
			  int temp =a[j+1];
			  a[j+1] = a[j];
			  a[j] = temp;
			}
		}
	}
	
}
void arrout(int a[],int n){
   int i;
   for(i=0;i<n;i++){
    printf("%3D",a[i]);
   }
   printf("\n");
 }

输出结果为:

2.选择排序

在介绍选择排序法之前,凭介绍一种把最小的数放在第一个位置上的算法,当然也可以用前面所讲的冒泡排序法,现在我们改用一种新的算法: 其指导思想是先并不急于调换位置,先从a[0]开始逐个检查,看哪个数最小,就记下该数所在的位置p,等一躺扫描完毕,再把a[p]和a[0]对调,这时a[0] a[9]最小的数据就换到了最前面的位置。算法的步骤如下。

(1)先假设a[0]的数最小,记下此时的位置p。

(2)依次把a[p]和a[i](从2变化到9)进行比较,每次比较时,若a[j]的数比a[p]中的数小,则把i的值赋给p,使p总是指向当前所扫描过的最小数的位置,也就是说a[p]总是等于所有扫描过的数中最小的那个数。在依次一一比较后,p就指向 10个数中 最小的数所在位置,即a[p]就是10 个数中最小的那个数。

(3)把a[p]和a[0]的数对调,那么最小的数就在a[0]中了,也就是在最前面了。

如果现在重复此算法,但每重复一次, 进行比较的数列范围就向后移动一个位置,即第二遍比较时范围就从第2个数一直到第 n个数,在此范围内找最小的数的位置p,然后把a[p]与a[2]对调,这样从第2个数开始到第n个数中,最小数就在a[2]中了,第三遍就从第个数到第n 个数中去找最小的数,再把a[p]与a[3]对调..此过程重复n-1次后,就把a组中n个数按从小到大的顺序排好了。这种排序的方法就是选择排序法。

下面我们定义一个临时变量temp代替a[p],进行排序。

选择排序修改为:从键盘输入的十个整数按升序排列输出

#include <stdio.h>
void main(){
  int i,j,k;
  int a[10];
  for(k=0;k<10;k++){
     scanf("%d",&a[k]);
  }
  for(i=0;i<9;i++){
	  for(j=i+1;j<10;j++){
		 
		  if(a[i]>a[j]){ 
		   int temp = a[j];
		   a[j] = a[i];
	        a[i] = temp;
		  }
	  }
	  
 
  }
  for(i=0;i<10;i++){
    printf("%d ",a[i]);
  }
}

区别

1.冒泡排序是比较相邻位置的两个数,而选择排序是按顺序比较,找最大值或者最小值;

2.冒泡排序每一轮比较后,位置不对都需要换位置,选择排序每一轮比较都只需要换一次位置;

3.冒泡排序是通过数去找位置,选择排序是给定位置去找数;

冒泡排序优缺点

1.优点:比较简单,空间复杂度较低,是稳定的;                 

 2.缺点:时间复杂度太高,效率慢;

选择排序优缺点

1.优点:一轮比较只需要换一次位置;

2.缺点:效率慢,不稳定(举个例子5,8,5,2,9   我们知道第一遍选择第一个元素5会和2交换,那么原序列中2个5的相对位置前后顺序就破坏了)。

总结

到此这篇关于C语言冒泡排序和选择排序使用的文章就介绍到这了,更多相关c语言冒泡排序和选择排序内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: c语言冒泡排序和选择排序的使用代码

本文链接: https://lsjlt.com/news/144718.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • c语言冒泡排序和选择排序的使用代码
    目录1.冒泡排序2.选择排序区别总结1.冒泡排序 冒泡排序将一个列表中的两个元素进行比较,并将最小的元素交换到顶部。两个元素中较小的会冒到顶部,而较大的会沉到底部,该过程将被重复执行...
    99+
    2024-04-02
  • C++冒泡排序与选择排序详解
    目录 一.冒泡排序1.概念 2.图解3.代码的思路4.代码例子 二.选择排序1.概念2.图解3.代码的思路总结 一.冒泡排序 1.概念 冒泡排序这种排序方法其实关键词就在于冒泡两个字...
    99+
    2024-04-02
  • java冒泡排序和选择排序详解
    目录1、冒泡排序2、选择排序法总结1、冒泡排序 冒泡排序(Bubble Sorting)的基本思想是:通过对待 排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发...
    99+
    2024-04-02
  • 排序算法(冒泡、选择)-python代码
    冒泡排序: def bubble_sort(list): for i in range(len(list) - 1): # 这个循环负责设置冒泡排序进行的次数 for j in range(len(list) ...
    99+
    2023-01-31
    算法 代码 python
  • C#算法之冒泡排序、插入排序、选择排序
    冒泡排序法 是数组等线性排列的数字从大到小或从小到大排序。 以从小到大排序为例。 数据 11, 35, 39, 30, 7, 36, 22, 13, 1, 38, 26, 18, 1...
    99+
    2024-04-02
  • C语言冒泡排序算法代码详解
    今天我们来用C语言实现一下冒泡排序 首先我们来了解一下什么叫做冒泡排序,冒泡顾名思义把质量轻的气体(如二氧化碳一样)浮到水面上(如可乐中的二氧化碳),因此冒泡排序的原理就是N个元素在...
    99+
    2024-04-02
  • c语言冒泡排序怎么用
    冒泡排序是一种简单排序算法,通过反复比较相邻元素并交换较大的元素,将较小的元素“冒泡”到前面位置。算法使用双重循环,外层循环遍历数组,内层循环比较相邻元素。当相邻元素较小元素在后时,交换...
    99+
    2024-05-21
    c语言 冒泡排序
  • JAVA小练习冒泡排序,选择排序和插入排序
    冒泡:点击(此处)折叠或打开...
    99+
    2023-06-02
  • JavaScript中怎么实现冒泡排序和选择排序
    本篇文章为大家展示了JavaScript中怎么实现冒泡排序和选择排序,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。算法说明算法(Algorithm)是解决问题的一种...
    99+
    2024-04-02
  • java中怎么实现冒泡排序和选择排序
    这篇文章将为大家详细讲解有关java中怎么实现冒泡排序和选择排序,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、冒泡排序冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序...
    99+
    2023-06-20
  • java选择排序和冒泡排序有什么区别
    Java中的选择排序和冒泡排序是两种不同的排序算法,它们的区别主要体现在排序的方式和效率上。 排序方式: 选择排序:每次从未排...
    99+
    2023-10-26
    java
  • 详解Java之冒泡排序与选择排序
    目录一.冒泡排序1.概念2.图解3.代码的思路4.代码例子二.选择排序1.概念2.图解3.代码的思路总结一.冒泡排序 1.概念 冒泡排序这种排序方法其实关键词就在于冒泡两个字,顾名思...
    99+
    2024-04-02
  • c语言入门3(冒泡排序)
    #include <stdio.h> struct student //结构体 {char name[21];char score;};int ma...
    99+
    2023-06-03
  • 【C语言】用冒泡排序实现my_qsort
    大家好,我是苏貝,本篇博客带大家了解如何用冒泡排序实现my_qsort,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 一. 前言二. 冒泡排序三. ...
    99+
    2023-10-07
    c语言 排序算法 开发语言
  • C语言中的冒泡排序问题
    目录冒泡排序的原理冒泡排序的步骤冒泡排序代码冒泡排序两种不同循环方法原理总结冒泡排序的原理 冒泡排序的步骤 假设我们现在有一个无序数组 arr[] = { 2,9,1,3,7,6 ...
    99+
    2022-12-27
    C语言冒泡排序 C冒泡排序 冒泡排序
  • C#算法中如何实现冒泡排序、插入排序、选择排序
    这篇文章主要介绍了C#算法中如何实现冒泡排序、插入排序、选择排序,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。冒泡排序法是数组等线性排列的数字从大到小或从小到大排序。以从小到...
    99+
    2023-06-26
  • 用Python写冒泡排序代码
    python代码实现冒泡排序代码其实很简单,具体代码如下所示: 代码Code highlighting produced by Actipro CodeHighlighter (freeware)htt...
    99+
    2022-06-04
    代码 Python
  • 手把手教你搞懂冒泡排序和选择排序
    目录冒泡排序原理:选择排序原理:总结冒泡排序 原理: 从头(左边)开始比较每一对相邻的元素,如果第1个比第2个大,就交换它们的位置,执行完一轮后,最末尾(最右边)就是最大的元素。 举...
    99+
    2024-04-02
  • 怎么理解JavaScript冒泡排序与选择排序
    本篇内容主要讲解“怎么理解JavaScript冒泡排序与选择排序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解JavaScript冒泡排序与选择排序”吧...
    99+
    2024-04-02
  • Java如何实现冒泡排序与选择排序
    小编给大家分享一下Java如何实现冒泡排序与选择排序,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一.冒泡排序1.概念冒泡排序这种排序方法其实关键词就在于冒泡两个...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作