目录

前言

一、选择法排序

二、冒泡法排序

三、交换法排序

四、插入法排序

五、折半法排序


前言

我们前面已经了解过数组的理论知识,但虽说数组是一个有序的集合,但这里的顺序指的是数组元素所在数组中的位置,我们接下来要说到的就是如何给数组里的数据按照大小顺序来排序。


一、选择法排序

顾名思义,选择法就是每次选择数组中最大或者最小的数组元素,将这个数组元素的值与前面没有进行排序的数组元素的值互换。

示例程序如下(降序排列):

#include<stdio.h>
int main()
{int i, j;int a[10];int iTemp;int iPos;printf("请输入数组中的元素的值:\n");for (i = 0; i < 10; i++){printf("a[%d]=", i);scanf_s("%d", &a[i]);}//排序for (i = 0; i < 9; i++){iTemp = a[i];iPos = i;for (j = i + 1; j < 10; j++){if (a[j] > iTemp){iTemp = a[j];iPos = j;}}a[iPos] = a[i];a[i] = iTemp;}//输出for (i = 0; i < 10; i++){printf("%d ", a[i]);if (i == 4)printf("\n");}return 0;
}

 运行结果如下:

然后这个选择法的运行逻辑就是先选取第一个数组元素,然后从这个数组元素之后的元素开始挨着与这个元素比较大小,如果大于所选取的数组元素,那就将这个元素的值与开始元素交换,全部运行完之后输出结果。


二、冒泡法排序

前面的选择法是依次把未排序的最大的数组元素排到开头或末尾,然后冒泡法是设置嵌套循环,进行若干(数组元素个数)次相邻数组元素之间的交换。

#include<stdio.h>
int main()
{int i, j;int a[10];int iTemp;int iPos;printf("请输入数组中的元素的值:\n");for (i = 0; i < 10; i++){printf("a[%d]=", i);scanf_s("%d", &a[i]);}for (i = 9; i > 0; i--){for (j = 0; j <= i; j++){if (a[j] < a[j+1]){iTemp = a[j + 1];a[j + 1] = a[j];a[j] = iTemp;}}}//输出for (i = 0; i < 10; i++){printf("%d ", a[i]);if (i == 4)printf("\n");}return 0;
}

运行结果就不放图了,与第一个相同,都是递减。


三、交换法排序

交换法排序是将每一位数与其其后的所有书一一比较,如果发现符合条件的数据则进行交换数据。

递增示例如下:

#include<stdio.h>
int main()
{int i, j;int a[10];int iTemp;int iPos;printf("请输入数组中的元素的值:\n");for (i = 0; i < 10; i++){printf("a[%d]=", i);scanf_s("%d", &a[i]);}for (i = 0; i < 9; i++){for (j = i + 1; j < 10; j++){if (a[j] < a[i]){iTemp = a[i];a[i] = a[j];a[j] = iTemp;}}}//输出for (i = 0; i < 10; i++){printf("%d ", a[i]);if (i == 4)printf("\n");}return 0;
}

四、插入法排序

插入法的基本工作原理是抽取一个数据,排在第一位(假设是递减)然后再取后面一个数据与与第一个数据比较,比第一个数据大就放在第一个数据前面,反之放在后面,接下来就是设置类似的嵌套循环,最终完成比较。

#include<stdio.h>
int main()
{int i, j;int a[10];int iTemp;int iPos;printf("请输入数组中的元素的值:\n");for (i = 0; i < 10; i++){printf("a[%d]=", i);scanf_s("%d", &a[i]);}for (i = 1; i < 10; i++){iTemp=a[i];iPos = i - 1;while ((iPos >= 0) && (iTemp < a[iPos])){a[iPos + 1] = a[iPos];iPos--;}a[iPos + 1] = iTemp;}//输出for (i = 0; i < 10; i++){printf("%d ", a[i]);if (i == 4)printf("\n");}return 0;
}

五、折半法排序

折半法排序是一种相比起前面的方法更为快速的排序方法,他的基本工作原理是先选取一个中间值,(递增)然后把比中间值小的放在左边,比中间值大的放在右边。

#include<stdio.h>
void Choose(int left, int right, int array[]);
int main()
{int i, a[8];printf("请输入数组中的元素的值:\n");for (i = 0; i < 8; i++){printf("a[%d]=", i);scanf_s("%d", &a[i]);}Choose(0, 7, a);printf("8个元素升序排列如下:");for (i = 0; i < 8; i++){printf("%d ", a[i]);if (i == 4)printf("\n");}printf("\n");return 0;
}
void Choose(int left, int right, int array[])
{int i, j;int middle, iTemp;i = left;j = right;middle = array[(left + right) / 2];do{while ((array[i] < middle) && (i < right))i++;while ((array[j] > middle) && (j > left))j--;if (i <= j){iTemp = array[i];array[i] = array[j];array[j] = iTemp;i++;j--;}} while (i <= j);if (left < j)Choose(left, j, array);if (right > i)Choose(i, right, array);
}

今天的数组排序就到这里,886:)

【数组的排序方法】 选择法、冒泡法、交换法、插入法、折半法相关推荐

  1. 简单的数组元素排序方法

    目录 概要: 一.冒泡排序法(Bubble Sort) 实现方法: 代码示例: 二.选择排序法(Selection Sort) 实现方法: 代码示例: 写在最后: 概要: 本文会介绍两种简单常用的数组 ...

  2. python sort 部分元素_Python 简单排序算法-选择、冒泡、插入排序实现

    写文章主要是记录自己每天学习的东西,本篇文章主要介绍数据结构中常用的简单的排序算法,虽然这些算法用Python实现起来不是十分的高效,不如c.java之类的运行速度快,应用Python实现主要是为了: ...

  3. js中的数组对象排序(方法sort()详细介绍)

    定义和用法 sort() 方法用于对数组的元素进行排序. 语法    arrayObject.sort(sortby) 参数sortby:可选.规定排序顺序.必须是函数. 返回值 对数组的引用.请注意 ...

  4. Python实现常用排序(选择、冒泡、插入、快排、合并排序、堆排序)

    排序 基本思想:各类排序的共同点,个人认为可以把原始的数据序列,划分为有序序列与无序序列.有序序列开始可能为0,在每一次操作(循环或者递归)后,有序序列数目会加1,无序序列数目会减一,代码走完后,原本 ...

  5. 数组sort排序方法,数字从小到大排序,汉字拼音音序排序

    1.直接用默认的sort方法,是按照Unicode排序,可能存在问题 例如:110,11,12=>11,110,12 (110会在12前面) 2.重写数组的sort方法进行数字排序: arr.s ...

  6. C语言之容易想到的一种数组去重排序方法

    直接上代码 #include<stdio.h> int main() {int a[1000]={0},cpy[1000]={0},flag,temp;int N,n,j,k,i,num= ...

  7. C语言排序方法-----选择排序法

    首先来看看选择排序法的定义 核心思想就是先在所有数据中选出一个最大或者最小的数放在第一位,然后再剩下的数据继续选最大或者最小的数放在第二位,依次进行下去直到结束. 下来直接看C代码的实现 #defin ...

  8. Java中对数组的排序方法总汇分析

    1.冒泡排序 public void bubbleSort(int a[]) {int n = a.length;for (int i = 0; i < n - 1; i++) {for (in ...

  9. 一维数组的排序方法----冒泡排序

    new []  arr = {4,3,2,1} // new一个新的数组 分析:1.像金鱼吐泡泡一样,水底→水面,泡泡也是小→大的.冒泡排序法:每次都从第一个元素开始比较,相邻两个元素排序,如果前&g ...

最新文章

  1. discard connection丢失数据_python kafka 生产者发送数据的三种方式
  2. 那些在一个公司死磕了5-10年的程序员,最后都怎么样了?
  3. java中this关键词
  4. soot——相关资源
  5. 青龙羊毛——飞鸽花转省毛毛(搬运)
  6. 主流html5桌面应用开发,主流HTML5开发工具推荐
  7. ngDialog 点击窗口以外不允许关闭弹窗
  8. python函数调用自身后果_python 写函数在一定条件下需要调用自身时的写法说明...
  9. Greenplum 类型一致性使用规范 - 索引条件、JOIN的类型一致性限制
  10. 青云的机房组网方案(简单+普通+困难)(虚树+树形DP+容斥)
  11. vue 绑定 class 和 内联样式(style)
  12. DPDK分析——UIO
  13. Visual Studio Ultimate 2012 激活密钥
  14. 银行业应用系统监控的维度与目标
  15. word中套用表格样式在哪里_表格套用表格样式在哪 word表格自动套用样式在哪
  16. Flutter 清除应用缓存
  17. Recylerview刷新图片闪烁
  18. Vizard基础操作
  19. Java高并发之魂:synchronized深度解析
  20. 基于ndis的防火墙源码供大家赏析firewall c

热门文章

  1. AD16_PCB电路板各个分层的用途
  2. 【创想QQ图标点亮辅助工具●V2.0官方版】
  3. 恒必达智能蓝牙耳机——解放自我的突破
  4. 成语状元王html5游戏在线玩,幸运成语答题王
  5. java下载文件总结
  6. c#入门基础与精通的各类电子书籍pdf
  7. 实验十二 百度地图 定位
  8. 重庆大学计算机类专业分数线,重庆大学计算机科学与技术专业2016年在重庆理科高考录取最低分数线...
  9. 给Github添加标签
  10. Docker GUI调研