• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C语言的冒泡排序和快速排序算法使用实例

C语言的冒泡排序和快速排序算法使用实例

作者:低调小一 字体:[增加 减小] 来源:互联网 时间:2017-05-28

低调小一 通过本文主要向大家介绍了c语言算法实例大全,c语言贪心算法实例,c语言算法实例,c语言递归算法实例,遗传算法c语言实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

冒泡排序法

题目描述:

    用一维数组存储学号和成绩,然后,按成绩排序输出。

输入:

    输入第一行包括一个整数N(1<=N<=100),代表学生的个数。
    接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。

输出:

    按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。
    如果学生的成绩相同,则按照学号的大小进行从小到大排序。

样例输入:

    3
    1 90
    2 87
    3 92

样例输出:

    2 87
    1 90
    3 92

代码:

     

  #include <stdio.h> 
    #include <stdlib.h> 
     
    struct student 
    { 
      int number; 
      int score; 
    }; 
     
    int main() 
    { 
      struct student students[101]; 
      int n, i, j; 
      struct student temp; 
     
      while(scanf("%d",&n) != EOF) 
      { 
        //接收数据 
        for(i = 0; i < n; i++) 
        { 
          scanf("%d%d",&students[i].number,&students[i].score); 
        } 
     
        //冒泡排序 
        for(i = 0; i < n - 1; i ++) 
        { 
          for(j = 0; j < n - i - 1; j ++) 
          { 
            if(students[j].score > students[j + 1].score) 
            { 
              temp = students[j]; 
              students[j] = students[j + 1]; 
              students[j + 1] = temp; 
            }else if(students[j].score == students[j + 1].score) 
            { 
              if(students[j].number > students[j + 1].number) 
              { 
                temp = students[j]; 
                students[j] = students[j + 1]; 
                students[j + 1] = temp; 
              } 
            } 
          } 
        } 
     
        //输出排序结果 
        for(i = 0; i < n; i ++) 
        { 
          printf("%d %d\n",students[i].number,students[i].score); 
        } 
      } 
       
      return 0; 
    } 
</div>

快速排序法


题目描述:

        有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。

输入:

        测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。
        每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。

输出:

        将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。
        然后输出学生信息,按照如下格式:
        姓名 年龄 成绩

样例输入:

    3
    abc 20 99
    bcd 19 97
    bed 20 97

样例输出:

    bcd 19 97
    bed 20 97
    abc 20 99

代码

  #include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 
     
    struct student{ 
      char name[101]; 
      int age; 
      int grade; 
    }; 
     
    int partition(struct student *A, int left, int right); 
    void quicksort(struct student *A, int begin, int end); 
     
    int main() 
    { 
      struct student students[1001]; 
      int i, n; 
     
      while(scanf("%d",&n) != EOF) 
      { 
        //学生成绩赋值 
        for(i = 0; i < n; i ++) 
        { 
          scanf("%s%d%d",students[i].name, &students[i].age, &students[i].grade); 
        } 
     
        //快速排序 
        quicksort(students, 0, n-1); 
     
        //打印输出 
        for(i = 0; i < n; i ++) 
        { 
          printf("%s %d %d\n",students[i].name, students[i].age, students[i].grade); 
        } 
      } 
     
      return 0; 
    } 
     
    void quicksort(struct student *A, int begin, int end) 
    { 
      int pivot; 
     
      if(begin < end) 
      { 
        pivot = partition(A, begin, end); 
        quicksort(A, begin, pivot - 1); 
        quicksort(A, pivot + 1, end); 
      } 
    } 
     
    int partition(struct student *A, int left, int right) 
    { 
      struct student stand = A[left]; 
     
      while(left < right) 
      { 
        while(left < right && (A[right].grade > stand.grade || (A[right].grade == stand.grade && strcmp(A[right].name,stand.name) > 0) || (A[right].grade == stand.grade && strcmp(A[right].name,stand.name) == 0 && A[right].age > stand.age ) ) ) 
        { 
          right --; 
        } 
        if(left < right) 
        { 
          A[left ++] = A[right]; 
        } 
     
        while(left < right && (A[left].grade < stand.grade || (A[left].grade == stand.grade && strcmp(A[left].name,stand.name) < 0) || (A[left].grade == stand.grade && strcmp(A[left].name,stand.name) == 0 && A[left].age < stand.age ) ) ) 
        { 
          left ++; 
        } 
        if(left < right) 
        { 
          A[right --] = A[left]; 
        } 
      } 
      A[left] = stand; 
      return left; 
    } 
</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C 语言插入排序算法及实例代码
  • C语言选择排序算法及实例代码
  • C语言中使用快速排序算法对元素排序的实例详解
  • C语言的冒泡排序和快速排序算法使用实例
  • C语言的数字游戏算法效率问题探讨实例
  • c语言中使用BF-KMP算法实例

相关文章

  • 2017-05-28C++学习小结之语句
  • 2017-05-28深入探讨:linux中遍历文件夹下的所有文件
  • 2017-05-28C#使用反射加载多个程序集的实现方法
  • 2017-05-28深入解析函数指针与返回函数的指针
  • 2017-05-28原创的C语言控制台小游戏
  • 2017-05-28详解C语言中const关键字的用法
  • 2017-05-28C++实现顺序排序算法简单示例代码
  • 2017-05-28利用boost获取时间并格式化的方法
  • 2017-05-28char str[] 与 char *str的区别详细解析
  • 2017-05-28C语言中对文件最基本的读取和写入函数

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 浅析C语言中的setjmp与longjmp函数
    • 为什么要学习C语言 C语言优势分析
    • 简单掌握C++编程中的while与do-while循环语句使用
    • 可读可执行的C语言简历源文件
    • 二分法求多项式在-10 10间值的实现代码
    • 简单实现C++复数计算器
    • C++中I/O模型之select模型实例
    • C语言指针是什么?1分钟彻底理解C语言指针的概念
    • c++利用windows函数实现计时示例
    • 线程池的原理与实现详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有