【C语言】详解C语言常用的五种数组排序方式 您所在的位置:网站首页 vb数组排序方法有哪些 【C语言】详解C语言常用的五种数组排序方式

【C语言】详解C语言常用的五种数组排序方式

2024-06-16 09:55| 来源: 网络整理| 查看: 265

文章目录 前言一、选择排序1.1 原理1.2 代码实现 二、冒泡排序2.1 原理2.2 代码实现 三、交换排序3.1 原理3.2 代码实现 四、插入排序4.1 原理4.2 代码实现 五、折半排序5.1 原理5.2 代码实现 总结

前言

数组是一组有序数据的集合。这里的“有序”指的是数组元素在内存中的存放方式是有序的,其引用方式有规律可循,而不是说数组元素在数组中是按照数值大小有序排列的。那么有没有什么办法让数组元素按照数值大小有序排列呢?接下来,给大家分享一下数组的各种常用的五种排序算法。

数组常用的五种排序方式: 选择排序、冒泡排序、交换排序、插入排序、折半排序

注:本章内容实例均以从小到大排序为准,从大到小排序原理相同。聪明的你看完本章后学会原理,解决大到小排序问题不在话下!

一、选择排序 1.1 原理

选择排序原理:每次在待排序的数组中,查找最小值,与所在的数组中的第一个位置交换元素,下一次排序时,从第二个位置开始向后查找,以此类推。

在这里插入图片描述 我们拿到一个数组,第一次排序,在数组中找到最小值1,和查找数组的第1个位置的元素数据8互换,将元素1放在数组下标0的位置上。第一次排序后数组的顺序是1,5,10,3,8;第二次排序在【5,10,3,8】数组中查找到最小值3,和当前查找数组的第一个位置的元素5交换位置,得到排序后的顺序1,3,10,5,8;第三次在【10,5,8】中查找到最小值5,和当前查找数组的第一个位置互换,得到排序后的顺序1,3,5,10,8;第四次排序在【10,8】中查找到最小值8,和当前查找数组的第一个位置互换,得到排序后的顺序1,3,5,8,10。至此完成从小到大的排序。

1.2 代码实现 int arr[10] = {15,6,20,13,16,8,2,18,7,10}; int pos,min;//min表示最小数组元素,pos表示最小数组元素的下标 for (int i = 0; i //设置内层循环下标为i+1~9,表示剩下的未排序数组元素部分 if (min > arr[j]) {//重新修正最小值 min = arr[j]; pos = j; } } arr[pos] = arr[i];//将最小元素和当先排序数组对应的元素交换位置 arr[i] = min; } for (int i = 0; i 15,6,20,13,16,8,2,18,7,10}; int i, j; int temp; int flag = 1;//结束冒牌排序的标志 while (flag) { flag = 0;//如果本次冒泡排序没有进入进入到if语句内,则代表排序完成 for (i = 0; i //如果前面一个比后一个大,则进行交换 flag = 1;//将标志位置成1, temp = arr[i + 1];//交换两个数据 arr[i + 1] = arr[i]; arr[i] = temp; } } } for (int i = 0; i int arr[10] = { 15,6,20,13,16,8,2,18,7,10 }; int i, j; int temp,pos; for (i = 0; i //内循环,表示后面待比较的元素 if (arr[i] > arr[j]) {//第一个元素比当前元素大,则交换两者位置 temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } for (int i = 0; i int arr[10] = { 15,6,20,13,16,8,2,18,7,10 }; int pos, temp; int i, j; for (i = 0; i //当插入的元素小于前面的元素,并且要插入的值不是第一个元素 arr[pos + 1] = arr[pos];//插入数组 pos--;//继续向前比较 } arr[pos + 1] = temp;//当插入的元素大于前面的元素,将这个位置设置为插入的值 } for (int i = 0; i int i, j;//i代表左侧指向位置left,j代表右侧指向位置right int temp; i = left; j = right; int middle = arr[(left + right) / 2];//获取中间值 do { while ((arr[i] //查找右侧比中间值小的元素,记录位置 j--; } if (i //以right为右侧起点,继续递归 Change(left, j, arr); } if (right > i) {//以left为左侧起点,继续递归 Change(i, right, arr); } } int main() { int arr[10] = { 15,6,20,13,16,8,2,18,7,10 }; int pos, temp; int i, j; Change(0, 9, arr); for (int i = 0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有