1、冒泡排序
冒泡排序是一种极其简单的排序算法,也是我所学的第一个排序算法。它重复地走访过要排序的元素,依次比较相邻两个元素,如果他们的顺序错误就把他们调换过来,直到没有元素再需要交换,排序完成。这个算法的名字由来是因为越小(或越大)的元素会经由交换慢慢“浮”到数列的顶端。

冒泡排序算法的运作如下:
1、比较相邻的元素,如果前一个比后一个大,就把它们两个调换位置。2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
  
由于它的简洁,冒泡排序通常被用来对于程序设计入门的学生介绍算法的概念。冒泡排序的代码如下:

#include <stdio.h>// 交换函数
void swap (int a[], int i, int j)
{int tmp = a[i];a[i] = a[j];a[j] = tmp;
}// 打印数组
void printA (int *a, int len)
{int i;for (i = 0; i < len; i++){printf ("%4d", a[i]);}printf ("\n");
}// 冒泡排序
int main()
{int a[10] = {9,6,8,0,3,5,2,4,7,1};int len = sizeof(a) / sizeof(a[0]);int i,j;// 外层循环控制轮数,每一轮找出一个最大的树沉底for (i = 0; i < len -1; i++){// 内层循环控制每一轮比较的次数for (j = 0; j < len-1-i; j++){if (a[j] > a[j+1]){swap (a, j, j+1);}}}printA (a, len);return 0;
}

2、冒泡改进——鸡尾酒排序
鸡尾酒排序,也叫定向冒泡排序,是冒泡排序的一种改进。此算法与冒泡排序的不同处在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能。

鸡尾酒排序的代码如下:

#include <stdio.h>// 交换函数
void swap (int a[], int i, int j)
{int tmp = a[i];a[i] = a[j];a[j] = tmp;
}// 打印数组
void printA (int *a, int len)
{int i;for (i = 0; i < len; i++){printf ("%4d", a[i]);}printf ("\n");
}// 鸡尾酒排序
int main()
{int a[10] = {9,6,8,0,3,5,2,4,7,1};int len = sizeof(a) / sizeof(a[0]);int i;int left  = 0;int right = len - 1;while (left < right){// 从左往右找到一个最大的数放到right的位置for (i = left; i < right; i++){if (a[i] > a[i+1]){swap (a, i, i+1);}}right--;     // 从右往左找到一个最小的数放到left的位置for (i = right; i > left; i--){if (a[i-1] > a[i]){swap (a, i, i-1);}}left++;}printA (a, len);return 0;
}

3、选择排序
选择排序也是一种简单直观的排序算法。它的工作原理很容易理解:初始时在序列中找到最小(大)元素,放到序列的起始位置作为已排序序列;然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

注意选择排序与冒泡排序的区别:冒泡排序通过依次交换相邻两个顺序不合法的元素位置,从而将当前最小(大)元素放到合适的位置;而选择排序每遍历一次都记住了当前最小(大)元素的位置,最后仅需一次交换操作即可将其放到合适的位置。

选择排序的代码如下:

#include <stdio.h>// 交换函数
void swap (int a[], int i, int j)
{int tmp = a[i];a[i] = a[j];a[j] = tmp;
}// 打印数组
void printA (int *a, int len)
{int i;for (i = 0; i < len; i++){printf ("%4d", a[i]);}printf ("\n");
}int main()
{int a[10] = {9,6,8,0,3,5,2,4,7,1};int len = sizeof(a) / sizeof(a[0]);int i,j;int min;// 外层循环控制轮数,每一轮找到一个最小的数for (i = 0; i < len-1; i++){min = i;    // 内层循环找每一轮最小数的下标for (j = i+1; j < len; j++){if (a[min] > a[j]){min = j;    // 保存当前最小元素的下标}}// 如果当前顶端元素不是最小的值,将最小的值和顶端元素进行交换if (min != i){swap (a, i, min);}   }printA (a, len);return 0;
}

常用排序算法总结

排序(一)冒泡排序、冒泡改进——鸡尾酒排序、选择排序相关推荐

  1. 10种排序算法比较(直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、折半插入排序、2路插入排序)

    本文(所有排序算法代码+综合比较代码)链接:https://download.csdn.net/download/qq_39932172/11217572 一.比较目的: 由于<数据结构> ...

  2. python简单选择排序_Python实现冒泡,插入,选择排序简单实例

    本文所述的Python实现冒泡,插入,选择排序简单实例比较适合Python初学者从基础开始学习数据结构和算法,示例简单易懂,具体代码如下: # -*- coding: cp936 -*-#python ...

  3. 经典排序算法(一) —— Selection Sort 选择排序

    经典排序算法(一) -- Selection Sort 选择排序 文章目录 经典排序算法(一) -- Selection Sort 选择排序 简介 排序过程 实现 复杂度 简介 选择排序是一种简单直观 ...

  4. c语言选择排序法程序设计,C语言基础之选择排序算法和代码

    在利用C语言进行编写程序的过程中,我们会常常通过算法及其代码来进行相关程序的编写工作.今天课课家笔者先给大家介绍C语言算法中的选择排序算法以及代码.那么到底什么是选择排序算法呢?下面由笔者慢慢道来. ...

  5. 数据结构排序算法 内部排序(冒泡、鸡尾酒、选择、简单插入、二分插入、快排、希尔、归并、堆排)C语言实现

    文章目录 排序 冒泡排序 鸡尾酒排序 选择排序: 简单插入排序: 二分插入排序 快速排序: 希尔排序: 归并排序: 堆排序: 排序 点击以下图片查看大图: 冒泡排序 1.比较相邻的元素,如果前一个比后 ...

  6. golang实现四种排序(快速,冒泡,插入,选择)

    本文系转载 原文地址: http://www.limerence2017.com/2019/06/29/golang07/ 前面已经介绍golang基本的语法和容器了,这一篇文章用golang实现四种 ...

  7. 数据结构最常用的排序算法一(冒泡、插入、选择)-Java实现

    冒泡排序 核心思想:冒泡排序只会比较相邻的两个数,相邻的两个数满足大小条件时不移动,不满足大小条件时交换位置,然后指针后移一位,直到指针到达未排序的序列的倒数第二个位置,再进行下一轮排序.冒泡排序每一 ...

  8. 排序算法之【打擂台算法】【冒泡算法】【选择排序】

    目录 博文内容: 本讲讲解排序算法里三种基本算法以及它们之间的区别 ★博文转载请注明出处. 1. 打擂台算法: 实现步骤: 原理: 代码实现: 运行结果: 2. 冒泡算法实现排序: 冒泡法(也叫做起泡 ...

  9. c语言选择排序_冒泡、插入、选择排序(C语言)

    以下排序算法默认从小到大的升序排序. 冒泡排序 思路从数组的第一个数a[0]开始,向后遍历,每次比较a[i]和a[i+1]的值若a[i]大于a[i+1],就交换两个位置的数的值.重复上述1和2的操作至 ...

最新文章

  1. 生产环境故障处理之nginx缓存权限问题
  2. Shell:传递命令行参数
  3. 众筹网02_项目环境搭建
  4. php要掌握的内容,入门PHPer需要掌握的哪些内容?
  5. SAP Spartacus User Form里checkbox的设计原理
  6. windows设备坐标和逻辑坐标的转换
  7. You must install 'msgfmt' on your build machine
  8. java 递归_采用递归算法求解迷宫问题(Java版) | 附代码+视频
  9. 在Asp.net MVC使用jqGrid--代码少点再少点
  10. android网络请求线程池,利用线程池实现Android客户端的http网络数据请求工具类
  11. 微信支持导出头像、手机号等个人信息!网友:这就是微信的“个人简历”?...
  12. linux 备份路由配置文件,RouterOS的备份和恢复
  13. linux cp{,bak},Linux中cp覆盖不提示
  14. 动态修改php的配置项
  15. 应用搬家:如何将软件从C盘迁移到D盘?
  16. LaTeX插入数学公式
  17. 制作照片边框 初学者 ps
  18. 印刷业ERP系统解决方案
  19. 电信物联网平台申请正式平台流程
  20. 民间53个不传之密 ,看了不后悔

热门文章

  1. 黄仁勋:英伟达收购 ARM 是谣言,下周发布会有惊喜
  2. python实现q-learning算法
  3. 数学分析课程笔记(张平):函数
  4. 10.8 UiPath 数据筛选Filter Data Table的介绍和使用(Excel数据写入另一个Excel中)
  5. Freemarker导出复杂Excel图文教程
  6. 某计算机视觉公众号干货文章集锦
  7. Restful API注解之@PathVariable和@JsonView详解
  8. 计算机桌面蓝字,电脑桌面上的图标都变成蓝色的了怎么办? – 手机爱问
  9. 【接口、多态】小练习
  10. AP Memory IoT RAM——嵌入式物联网最佳存储解决方案