C语言算法——实现冒泡排序

这篇具有很好参考价值的文章主要介绍了C语言算法——实现冒泡排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、冒泡排序

#include <stdio.h>
int main ( )
{
    //冒泡排序
    int a[]={3,2,6,4,8,9,1,0,3,5,7,1};
    int len=sizeof(a)/sizeof(int);//求出数组中元素的个数
//    printf("%d\n",len);
    int i=0,j;
    for (; i<len-1; i++) {	//n个元素进行冒泡排序需要进行n-1次循环
        for (j=0; j<len-1-i; j++) {	//每次循环完一次,最大的数就在最后,所以每进行一次循环后面的那几个数就不需要参与循环,所以i<len-i-1
            if (a[j]>a[j+1]) {//实现元素的交换
                int temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
    
    for (i=0; i<len; i++) {
        printf("%d  ",a[i]);
    }
    printf("\n");
}

冒泡排序,c语言开发,c语言,算法,排序算法

2、插入排序

冒泡排序,c语言开发,c语言,算法,排序算法

默认数组中的第一个数是原本数组中排好序的第一个数,然后每次将排好序的数组的后面的第一个数作为哨兵。每次哨兵都和前面的排好序的数组中的数从后往前进行比较,然后将哨兵插入到已经排好序的数组中。然后哨兵逐渐往后移动,逐步将哨兵插入到数组中,这就是插入排序的整体思路和步骤

#include <stdio.h>
int main()
{
    int arr[6]={4,6,1,2,8,7};
    int n = sizeof(arr)/sizeof(int); //求出数组的长度
    int i,j,k;
    for (i=1; i<n; i++) {
        k = arr[i];  //哨兵,从数组中的第二个元素开始进行存储,每一次往后移动一位进行储存,将这个数插入到前面已经排好序的数组中。
        j=i-1;   //已经排好序的数组的最后一个元素的下标。
        while(j>=0 && k<arr[j]){ //每次哨兵和前面排好序的数组中的元素从后往前进行比较,找到哨兵要插入的位置。
            arr[j+1]=arr[j]; //为哨兵腾出位置,以便于将哨兵插入数组中合适的位置。
            j--;  //用j记录最终哨兵要插入的位置。
        }
        arr[j+1] = k; //将哨兵插入到数组合适的位置(形成一个新的排好序的数组)
    }
    for (i=0; i<n; i++) {
        printf("%d  ",arr[i]);
    }
    printf("\n");
}

冒泡排序,c语言开发,c语言,算法,排序算法

3、选择排序

说明:动图来自与此链接,点击我直接进入,感谢博主的分享
冒泡排序,c语言开发,c语言,算法,排序算法

说明:动图来自与此链接,点击我直接进入,感谢博主的分享

思路:
每次从待排序列中选出一个最小值,然后放在序列的起始位置,直到全部待排数据排完即可。

实际上,我们可以一趟选出两个值,一个最大值一个最小值,然后将其放在序列开头和末尾,这样可以使选择排序的效率快一倍。

方案一:只找最小的值,将最小的值往前移

#include <stdio.h>
int main()
{
    int a[]={2,9,5,0,1,3,6,8};
    int n = sizeof(a)/sizeof(int);//求出数组a的长度
//    printf("%d\n",n);
    int begin=0,end=n-1;
    while (begin<end) {
        int min=a[begin];//min用于存储数组中元素的最小的值
        int t=begin;//t表示的是数组中最小数的下标
        for(int i=begin ; i<end;i++){
            if (min>a[i]) {
                min=a[i];
                t = i;
            }
        }
        a[t]=a[begin];
        a[begin] = min;
        begin++;
    }
    
    int i = 0;
    for (; i<n; i++) {
        printf("%d   ",a[i]);
    }
    
    printf("\n");
}

方案二:找最小值和最大值,最小值往前移,最大值往后移文章来源地址https://www.toymoban.com/news/detail-760035.html

#include <stdio.h>
int main()
{
//    思路:
//    每次从待排序列中选出一个最小值,然后放在序列的起始位置,直到全部待排数据排完即可。
//    实际上,我们可以一趟选出两个值,一个最大值一个最小值,然后将其放在序列开头和末尾,这样可以使选择排序的效率快一倍。
    int a[]={2,9,5,0,1,3,6,8};
    int n = sizeof(a)/sizeof(int);//求出数组a的长度
//    printf("%d\n",n);
    int begin=0,end=n-1;//begin表示数组的第一个元素,end表示数组的最后一个元素。
    int x=0,y=0; //x,y分别记录数组中最大值、最小值的数的下标。
    while(begin<end){
        int min = a[begin],max = a[begin];//先将数组中的第一个元素作为最大值和最小值(因为我们也不知道最大值最小值在哪)
        //使用for循环遍历数组,每一找到数组中的最大值和最小值赋值给max和min。
        int i=begin;
        for (; i<=end; i++) {
            if (a[i]>max) {
                max=a[i];
                x=i;   //记录所查找范围内最大数的下标
            }
            if (a[i]<min) {
                min=a[i];
                y=i;   //记录所查找范围内最小数的下标
            }
        }
        //将数组中最大数的下标和end下标的数值进行交换
        a[x]=a[end];
        a[end] = max;
        //将数组中最小数的下标和begin下标的数值进行交换
        a[y]=a[begin];
        a[begin] = min;
        //此时最左边和最右边已经存储了最小值和最大值,所以begin要往后移动,end要往前移动,在这个新的begin和end的范围内再进行选择排序
        ++begin;
        end--;
    }
    
    int i=0;
    for (i=0; i<n; i++) {
        printf("%d  ",a[i]);
    }
    printf("\n");
}

到了这里,关于C语言算法——实现冒泡排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【排序算法】冒泡排序(C语言)

    【排序算法】—— 冒泡排序 ​ 冒泡排序法:(Bubble sort)是一种基础的交换排序,非常简单,一学就懂 ​ 对数组进行遍历,每次对相邻两个进行比较大小,若大的数值在前面则交换位置(升序),完成一趟遍历后数组中最大的数值到了数组的末尾位置,再对前面n-1个数值进

    2024年02月06日
    浏览(54)
  • 快速了解四种排序算法:希尔排序,堆排序,快速排序,冒泡排序(c语言)

     一个程序员一生中可能会邂逅各种各样的算法,但总有那么几种,是作为一个程序员一定会遇见且大概率需要掌握的算法。 1.1算法(algorithm ) 是指令的集合,是为解决特定问题而规定的一系列操作。 它是明确定义的可计算过程,以一个数据集合作为输入,并产生一个数据

    2024年02月16日
    浏览(50)
  • C语言入门:冒泡法排序、交换法排序和选择法排序算法的详解(代码分析)

     冒泡法排序 :顾名思义,小的数据就好像水中的气泡一样总是逐渐往上升, 大的数据就像石块一样往下沉,因此称为冒泡法排序法。 假如有n个数字,则需要进行n-1轮  第一轮结果:最大的数,被放在了最后一位  第二轮:元素 ‘8’ 已经拍好了顺序,所以只用将前4个元素

    2024年02月03日
    浏览(49)
  • Java 语言实现冒泡排序

    冒泡排序是一种简单直观的排序算法,它重复地比较相邻的两个元素,如果顺序错误就交换它们,直到没有需要交换的元素为止。冒泡排序的思路是通过每一轮的比较将最大(或最小)的元素逐渐“冒泡”到数组的最后,并将其固定在正确的位置上。 Java作为一种高级语言,

    2024年02月10日
    浏览(43)
  • 冒泡排序算法实现步骤

    算法实现的过程: 1. 定义问题:    - 算法是用来解决某一特定计算问题的方法步骤。例如,对于排序问题,我们需要一个算法对一组无序的整数进行排序。 2. 设计算法:    - 冒泡排序是一种基础的排序算法。它的设计思路是重复遍历要排序的数列,每次遍历时都将相邻两

    2024年04月11日
    浏览(42)
  • c语言用冒泡排序模拟实现qsort排序

    1、简单介绍冒泡排序 冒泡排序就是两两相邻元素进行比较,如果不满足顺序就进行交换。现有一组整数,将其用冒泡排序实现排序为升序。 假设有这样一组整数:9 8 7 6 5    由此可知,如果一个整型数组有num个元素,则需走num-1趟,若走在第i趟,则在第i趟内需要比较num-1

    2024年02月15日
    浏览(45)
  • Shell脚本实现数组冒泡排序等简单算法排序

    目录 一、冒泡排序 1.简介 2.基本思想 3.算法思路 4.shell脚本实现 二、选择排序 1.简介 2.基本思想 3.shell脚本实现 三、插入排序 1.算法思路 2.shell脚本实现 四、反转排序 1.作用 2.shell脚本实现 类似气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。 冒

    2024年02月09日
    浏览(111)
  • 稳定的排序算法:直接插入排序和冒泡排序 (c++实现)

    1.直接插入排序: 插入排序:就是把数组分为左右两个序列,保持左边序列中所有元素是有序的,(当左边序列只有第一个元素时,本身就是有序的,)每次往后移一个,将这个元素保存起来,跟左边的元素进行比较,直到找到第一个小于它的元素后停下,此时的位置是这个

    2024年02月10日
    浏览(44)
  • C++实现冒泡排序算法(含源码)

    C++实现冒泡排序算法(含源码) 冒泡排序是一种简单的排序算法,它通过不断交换相邻的元素,将较大的元素逐步\\\"浮\\\"到待排序列的尾部,从而实现排序。下面是C++的冒泡排序实现代码: 该函数接受一个整型数组和数组长度作为参数,在每次遍历中,它比较相邻的两个元素,将

    2024年02月07日
    浏览(41)
  • 【Java】使用 Java 语言实现一个冒泡排序

    大家好,我是全栈小5,欢迎阅读小5的系列文章。 这是《Java》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平

    2024年03月22日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包