C语言冒泡排序

  冒泡排序基本思想



  将n个记录看作按纵向排列,每趟排序时自下至上对每对相邻记录进行比较,若次序不符合要 求(逆序)就交换。每趟排序结束时都能使排序范围内关键字最小的记录象一个气泡一样升到表上端的对应位置,整个排序过程共进行n-1趟,依次将关键字最 小、次小、第三小…的各个记录“冒到”表的第一个、第二个、第三个…位置上。

  初态 第1趟 第2趟 第3趟 第4趟 第5趟 第6趟 第7趟

  38  12  12  12  12  12  12  12

  20  38  20  20  20  20  20  20

  46  20  38  25  25  25  25  25

  38  46  25  38  38  38  38  38

  74  38  46  38  38  38  38  38

  91  74  38  46  46  46  46  46

  12  91  74  74  74  74  74  74

  25  25  91  91  91  91  91  91

  /*

  Title: 冒泡排序

  Author: Li Aimin

  Date: May 2007

  算法功能:冒泡排序算法实现将一个长度为n的线性表r上的所有元素按关键字升序排列。

  */

  #include<stdio.h>

  void bubblesort(int r[],int n)

  { /*elements are stored in r[1] to r[n]*/

  int i,j,flag;

  int temp;

  flag=1;

  i=1;

  while((i<n)&&(flag==1)) /*外循环控制排序的总趟数*/

  { flag=0;

  for(j=n;j>i;j--) /*内循环控制一趟排序的进行*/

  if(r[j]<r[j-1]) /*相邻元素进行比较,若逆序就交换*/

  {

  flag=1;

  temp=r[j];

  r[j]=r[j-1];

  r[j-1]=temp;

  }

  i++;

  }

  } /*bubblesort*/

  void show(int r[] , int n)

  {

  /*elements are stored in r[1] to r[n]*/

  int i;

  for(i=1;i<=n;i++)

  printf(" %d ",r[i]);

  printf("n");

  

  }

  void main()

  {

  int a[9201],i;

  for(i=0;i<9201;i++)

  a[i]=9201-i;

  //show(a,100000);

  bubblesort(a,9200);

  show(a,9200);

  }

时间: 2024-09-25 22:05:37

C语言冒泡排序的相关文章

c语言-C语言冒泡排序的小问题

问题描述 C语言冒泡排序的小问题 void bubblesort(intArr*ia){ int i,j,t,n=ia->cur; for(i=n;i>2;i--) for(j=1;j?if(ia->pt[j]>ia->pt[j-1]){ t=ia->pt[j-1]; ia->pt[j-1]=ia->pt[j]; ia->pt[j]=t; } 上面这段是算法其中的排序部分,对长度为ia->cur的数组排序,结果似乎有点问题,结果后两位有时错位,另

C语言冒泡排序法心得_C 语言

记得以前在大学里学习c语言的时候,刚开始是很吃力的. 入门级别的算法中有个叫冒泡排序法,也有称为气泡排序法.那时候刚接触它就对它的名字特别感兴趣,因为觉得很有意思.好了,废话不多说了,我们先一起简单回忆下这个冒泡排序法.  一.打印行和列一般是这样的一个简单代码,输出4行4列*: for(int i = 1,i < 5,i++){ for(int j = 1,j < 5,j++){ printf("*"); } printf("n\"); }  二.打印

C语言冒泡排序算实现代码_C 语言

冒泡排序是排序算法的一种,思路清晰,代码简洁,常被用在大学生计算机课程中. "冒泡"这个名字的由来是因为越大的元素会经由交换慢慢"浮"到数列的顶端,故名. 这里以从小到大排序为例进行讲解. 基本思想及举例说明 冒泡排序的基本思想就是不断比较相邻的两个数,让较大的元素不断地往后移.经过一轮比较,就选出最大的数:经过第2轮比较,就选出次大的数,以此类推. 下面以对 3  2  4  1 进行冒泡排序说明. 第一轮 排序过程3  2  4  1    (最初) 2  3 

c语言-冒泡排序可以这样写吗,我只对结构体数组中某一个元素进行排序,然后交换

问题描述 冒泡排序可以这样写吗,我只对结构体数组中某一个元素进行排序,然后交换 struct troop { char name[1]; int a[3]; }tro[4]; void bubblesort(int a, int b, int c) { struct troop temp; int i, j; for (i=a; i { for (j=a+1; j { if (tro[j].a[c] > tro[i].a[c]) { temp = tro[j]; tro[j] = tro[i];

c语言中的冒泡排序算法

问题描述 c语言中的冒泡排序算法 直接上代码,图: #include #include #include typedef struct{ int*pt; int cur; int len; }intArr; void bubblesort(intArr*ia){ int i,j,t,n=ia->cur; for(i=n;i>2;i--) for(j=1;j if(ia->pt[j]>ia->pt[j-1]){ t=ia->pt[j-1]; ia->pt[j-1]=

c语言-C语言中的冒泡排序法(详细解说)

问题描述 C语言中的冒泡排序法(详细解说) 对输入的20个数进行排序,储存在数组中,在输入一个数,在不改变原序的情况下,输出这21个数.(麻烦各位大神解释清楚点,我还是新手!) 解决方案 C语言--冒泡排序法(详细注释) 解决方案二: 示例: #include"stdio.h" main() { int a[5],*p,i,t,j; for(i=0;i scanf("%d",&a[i]); printf(" "); for(i=0;i {

C语言实现选择排序、直接插入排序、冒泡排序的示例_C 语言

选择排序选择排序是一种简单直观的排序算法,其核心思想是:遍历数组,从未排序的序列中找到最小元素,将其放到已排序序列的末尾. 时间复杂度:O(n^2) 稳定性 :不稳定 /* * @brief selection sort */ void selection_sort(int a[], int n) { int i, j, min, tmp; for (i = 0; i < n - 1; ++i) { min = i; for (j = i+1; j < n; ++j) { if (a[j] &

C语言实现选择排序、冒泡排序和快速排序的代码示例_C 语言

选择和冒泡 #include<stdio.h> void maopao(int a[],int len){ int i,j,temp; for(i = 0;i < len - 1 ; i ++){//从第一个到倒数第二个 for (j = 0 ; j < len - 1 - i ; j ++)//排在后的是已经排序的 { if (a[j] > a[j + 1])//大的数换到后面去 { temp = a[j]; a[j] = a[j + 1]; a [j + 1] = tem

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

BubblSort.c #include<stdio.h> void BubbleSort(int a[],int len) { int i; int j; int h; int temp; for(i=0;i<len-1;++i) { for(j=len-1;j>i;--j) { if(a[j]<a[j-1]) { temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; } } for(h=0;h<len;h++) { printf(" %