C语言几种排序算法的实现
来源:互联网 发布:幕墙易云计算好用吗 编辑:程序博客网 时间:2024/05/20 20:55
1.冒泡排序
假设有N个数据随机排列。将N-1位置的数据与N-2位置的数据比较。如果N-1位置的数据比N-2位置的数据小,则交换两个位置的数字,紧接着比较N-2位置的数据与N-3位置数据的大小,依次类推,直到位置0。一次排序过后,位置0的数据就是最小值,通过一次排序,最小值好像泡沫一样浮到数据序列的前面。接着再进行一次这种排序,位置1的数据就是第二小的,以此类推就i可以得到排序完成的数据。
代码如下:
void BubbleSort(int r[], int length){int i1, i2, flag;int tmp;for (i1 = 0; i1 < length - 1; i1++){flag = 0;for (i2 = length - 1; i2 > i1; i2--){if (r[i2] < r[i2 - 1]){tmp = r[i2-1];r[i2 - 1] = r[i2];r[i2] = tmp;flag = 1;}}if (flag == 0){break;}}}
如果一次排序中fflag没有发生改变,说明数字序列已经排序完毕。
2.选择排序
选择排序使用一个变量记录下标,先将0位置的数据与0位置后的的其他数据进行比较,变量记录为0,每次比较如果发现数据比位置0的数据小就将该位置的下标赋值给变量,全部比较完过后就查看变量是否发生改变,如果发生改变就交换两个位置的数据。每次排序过后即得到一个最小值。由此,多次排序之后即可以得到一个排序的数据序列。
代码如下:
void SelectSort(int r[], int length){int i1, i2, i3;int tmp;for (i1 = 0; i1 < length - 1; i1++){i3 = i1;for (i2 = i1 + 1; i2 < length; i2++){if (r[i2] < r[i3]){i3 = i2;}}if (i3 != i1){tmp = r[i1];r[i1] = r[i3];r[i3] = tmp;}}}
3.快速排序
快速排序通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据要小,然后按照此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
代码如下:
void QuickSort(int r[], int length){int i1 = 0, i2 = length - 1;int val = r[0];if (length > 1){while (i1 < i2){for (; i2 > i1; i2--){if (r[i2] < val){r[i1] = r[i2];break;}}for (; i1 < i2; i1++){if (r[i1] > val){r[i2] = r[i1];break;}}}r[i1] = val;QuickSort(r, i1);QuickSort(r + i1 + 1, length - 1 - i1);}}
4.插入排序
插入排序就像扑克牌拾牌一样,每一次都抽取都将手中的牌从小到大排序。基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序序列。
void InsertionSort(int r[], int first, int last){int i1, i2;int tmp;for (i1 = first + 1; i1 <= last; i1++){tmp = r[i1];i2 = i1 - 1;while ((i2 >= first) && (r[i2] > tmp)){r[i2 + 1] = r[i2];i2--;}r[i2 + 1] = tmp;}}
0 0
- c语言实现几种排序算法
- 几种常用排序算法的C语言实现
- 几种常见排序算法的c语言实现
- 几种常用排序算法的C语言实现
- 几种常见排序算法的C语言实现
- 几种排序算法的C语言实现
- 几种C语言实现的排序算法
- 几种常见排序算法的c语言实现
- 几种常见排序算法的c语言实现
- C语言几种排序算法的实现
- 几种常用的排序算法(c语言实现)
- c语言实现几种排序算法OC实现
- C语言实现几种常见排序算法
- c语言编程的几种排序算法比较
- C语言几种排序算法比较
- C语言几种排序算法比较
- c语言的几种常用排序的实现
- 几种排序方法的实现 (C语言)
- [C++]strcpy和strcpy_s itoa和_itoa_s
- JavaScript控制样式
- 模板(Template)
- 真厉害!树莓派销量破1250万仅次于Windows、Mac
- SSL1602 复制书稿(dp)
- C语言几种排序算法的实现
- 面试题总结 —— JAVA高级工程师(一)
- 蓝桥杯 包子凑数(拓展欧几里得)
- Bilibili爬虫之爬取视频和UP主信息
- 编译原理_简单优先文法_语法分析器_Java
- Tempter of the Bone (dfs + 奇偶剪枝)
- 动态规划
- IE浏览器下常见的CSS兼容问题
- spoj 694 Distinct Substrings (后缀数组)