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
原创粉丝点击