您的位置:首页 > 编程语言 > C语言/C++

C语言几种排序算法的实现

2017-04-24 21:12 323 查看

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  排序算法 c语言