其他分享
首页 > 其他分享> > No.1 排序 - 冒泡排序

No.1 排序 - 冒泡排序

作者:互联网

冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。时间复杂度O(N **2)

/* 同一个 project 内,只能有一个 main function*/

EG1. 输入一列数字,并以从大到小的顺序输出

#include <stdio.h>
void main()
{
  int ll[100], i, j, t, n;  //不确定列表长度,先申请100个
  scanf("%d", &n);   // scanf 中,默认以空格断字,无需再加空格
  for (i=0; i<n; i++)
    scanf("%d", &ll[i]); //按照顺序,将数字扫描如列表中

  for (i=0; i<n; i++)  //列表索引从 0 开始,n-1 结束,共 n 个数字
  {         //嵌套循环代码块,最好使用多个 {} 分割
    for(j=0; j<n-i; j++) //冒泡时,从第1位开始比较直到最后一个尚未归位的数
    {
      if (ll[j] < ll[j+1])
      {
        t=ll[j]; ll[j]=ll[j+1]; ll[j+1]=t;
      }
    }
  }
  for (i=0; i<n; i++)
    printf("%d ", ll[i]);  //printf 中加空格,使得打印以空格间距
  //return 0;
}

 

EG2. 以学生的分数为准进行排序

struct student  //创建一个结构体来存储学生姓名和分数,注意 char score

{
  char name[20];
  char score;
};
int main(){
  struct student a[100], t;  // t == student

  int i,j,n;

  scanf("%d", &n);

  for (i=0; i<n; i++)
    scanf("%s %d",a[i].name, &a[i].score);  //&a[i].score,分数的内存指针,不是分数值

  for (i=0; i<n-1; i++){
    for(j=0; j<n-i; j++){
      if (a[j].score < a[j+1].score){
        t = a[j]; a[j]=a[j+1]; a[j+1]=t;  // t 也是结构体,可以直接作为学生的中间变量
      };
    }
  }

  for (i=0; i<n; i++)
    printf("%s %d ",a[i].name, a[i].score);  // 注意 a[i].score 与 &a[i].score 的区别
  return 0;
}

标签:int,ll,冒泡排序,空格,score,No.1,printf,排序,scanf
来源: https://www.cnblogs.com/yalimy/p/14977126.html