C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些。

  1. 简单交换法排序

     /*简单交换法排序
    根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置
    交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动
    不稳定
    */
    #include<windows.h>
    #include<stdio.h>
    void main(){
    int i,j,arr[]={,,,,,,,,,},t;
    int size = sizeof(arr)/sizeof(int);//计算数组的大小
    for(i = ;i< size-;i++){//n个数进行n-1轮比较
    for(j = i+;j< size;j++)//每一轮比较时,后面的数与i为下标的数比较
    if(arr[j]<arr[i]){//如果i为下标的数比后面的一个数大,将两个数交换位置
    t=arr[j];
    arr[j]=arr[i];
    arr[i]=t;
    }
    } for(i = ;i< size;i++){//输出
    printf("%d ",arr[i]);
    } system("pause");
    }
  2. 直接选择排序
     /*选择排序
    每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
    选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)
    */
    #include<windows.h>
    #include<stdio.h>
    void main(){
    int min,i,j,arr[]={,,,,,,,,,},t;
    int size = sizeof(arr)/sizeof(int);//计算数组的大小
    for(i = ; i< size-;i++){//n个数进行n-1轮比较
    min = i;//每一轮假定i为下标的这个数为最小值,记录下标
    for(j = i+;j < size;j++)//每一轮比较时,后面的数与min为下标的数比较
    if(arr[j]<arr[min]) min = j;//后面的数比min为下标的数小,更换min
    if(min != i){//如果min的值发生了变化即当前下标为i的数不是最小值,交换
    t = arr[i];
    arr[i]=arr[min];
    arr[min] = t;
    }
    } for(i = ;i< size;i++){//输出
    printf("%d ",arr[i]);
    } system("pause"); }
  3. 冒泡排序
    /*冒泡排序
    重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
    走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成
    */
    #include<windows.h>
    #include<stdio.h>
    void main(){
    int min,i,j,arr[]={,,,,,,,,,},t,noswap;
    int size = sizeof(arr)/sizeof(int);//计算数组的大小
    for(i = ; i< size-;i++){//n个数进行n-1轮比较
    noswap = ;//标记是否发生交换,以避免对已经有序的序列再排序
    for(j = ;j<size--i;j++){
    if(arr[j]>arr[j+]){//如果前一个数比后一个数大,交换
    t=arr[j];
    arr[j]=arr[j+];
    arr[j+]=t;
    noswap = ;//发生了交换
    }
    } if(noswap) break; //没有发生交换,说明已经有序,无需再排序,退出循环
    } for(i = ;i< size;i++){//输出
    printf("%d ",arr[i]);
    } system("pause"); }

C语言排序算法之简单交换法排序,直接选择排序,冒泡排序的更多相关文章

  1. 排序算法Java代码实现(一)—— 选择排序

    以下几篇随笔都是记录的我实现八大排序的代码,主要是贴出代码吧,讲解什么的都没有,主要是为了方便我自己复习,哈哈,如果看不明白,也不要说我坑哦! 本片分为两部分代码: 常用方法封装 排序算法里需要频繁使 ...

  2. Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...

  3. [java初探06]__排序算法的简单认识

    今天,准备填完昨天没填的坑,将排序算法方面的知识系统的学习一下,但是在简单的了解了一下后,有些不知如何组织学习了,因为排序算法的种类,实在是太多了,各有优略,各有适用的场景.有些不知所措,从何开始. ...

  4. Java常用排序算法+程序员必须掌握的8大排序算法

    概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大, ...

  5. Java 常用排序算法/程序员必须掌握的 8大排序算法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...

  6. 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)

    排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列. 稳定度(稳定性)一个排序算法是稳定的,就是当有两个相等记录的关 ...

  7. C语言排序算法学习笔记——交换类排序

    交换类排序:根据序列中两个元素关键字的比较结果来交换他俩在序列中的位置. 冒泡排序:假设待排序表长为n,从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i])则交换他们 ...

  8. Java学习笔记——排序算法之简单排序

    男儿何不带吴钩,收取关山五十州.请君暂上凌烟阁,若个书生万户侯? --南园十三首 三种排序法: 1.冒泡法 2.简单选择法 3.直接插入法   上代码: 1.冒泡排序 public class Bub ...

  9. [转]Java 常用排序算法/程序员必须掌握的 8大排序算法

    本文转自:http://www.cnblogs.com/qqzy168/archive/2013/08/03/3219201.html 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插 ...

随机推荐

  1. Xenu Link Sleuth

    Xenu Link Sleuth 是一款检查网站死链接的软件,可以通过它打开一个本地的网页文件来检查它的链接,也可以输入任何网址来检查. 具体使用如下: 1,下载,并安装. 2,打开软件,出现 Tip ...

  2. git --fast-version-control

    --distributed-is-the-new-centralized 读二进制文件 python  读doc  xls 几乎所有的版本控制系统都以某种形式支持分支.使用分支意味着你可以把你的工作从 ...

  3. <2014 08 29> MATLAB的软件结构与模块、工具箱简示

    MATLAB的系统结构:三个层次.九个部分 ----------------------------------- 一.基础层 是整个系统的基础,核心内容是MATLAB部分. 1.软件主包MATLAB ...

  4. 让你的代码量减少3倍!使用kotlin开发Android

    (一) 创建Kotlin工程 (二) –秘笈!扩展函数 (三) 缩短五倍的Java Bean 本项目使用的代码地址

  5. 使用 10046 查看执行计划并读懂 trace 文件

    查看 sql 执行计划的方法有许多种, 10046 事件就是其中的一种. 与其他查看 sql 执行计划不同, 当我们遇到比较复杂的 sql 语句, 我们可以通过 10046 跟踪 sql 得到执行计划 ...

  6. go——切片

    切片(slice)可以看作一种对数组的包装形式,它包装的数组为该切片的底层数组.反过来讲,切片是针对其底层数组中某个连续片段的描述,下面的代码声明了一个切片类型的变量: var ips = []str ...

  7. MySQL的搜索引擎,统一字符编码 和忘记MySQL密码如何破解

    忘记mysql密码 linux平台下,破解密码的两种方式 [root@egon ~]# rm -rf /var/lib/mysql/mysql #所有授权信息全部丢失!!! [root@egon ~] ...

  8. 系统间接口联调总是报500 for URL 和 乱码

    两个系统做数据传输时,懒省事,直接访问 action 方式.结果总是报500,或者fileNotFount. 究其原因是因为两边的数据格式没对应上.post请求返回的格式是String,数据提供方返回 ...

  9. s5_day8作业

    # 1 整理今天装饰器代码(每人手写一份,注意,是手写,交到小组长手里,明天我检查),准备明天默写 # 2 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 ...

  10. 百度feed 寒假实习 一面二面(offer)

    一面(1小时) 自我介绍,研究方向,本科学校,家乡等等.. 1 介绍了jdd风险登录的比赛,问题背景,建模,特征构建,特征选择,模型等. 个人觉得介绍项目一定要高大上一点,把自己创新或者有创意的点子讲 ...