排序算法(更新ing)(C语言实现)(认真的不像实力派)

为什么要总结排序算法:

由于时而要用到排序的思想,这里慢慢总结吧,以前也看的不少,但是荒废久了,也就忘得差不多了,这里贴出供需要的人看吧。互联网虽好,但有时候资源良莠不齐,看的也是头疼,不如总结来供自己查阅。

定位:排序是一种重要的,基本的算法。

1、冒泡(起泡)法排序(2018/06/04 pm 17:20):

基本思路:每次将相邻的两个数比较,将小的调到前头。若有6个数:9    8    5    4    2    0;比较过程如下图:

第一趟比较:

9


8

8

8

8

8

8

9


5

5

5

5

5

5

9


4

4

4

4

4

4

9


2

2

2

2

2

2

9


0

0

0

0

0

0

9

第1次

第2次

第3次

第4次

第5次

结果

第1次:先将最前面的两个数(8和9)比较大小,小的浮上去,大的沉下去;

第2次:将第2和第3个数(9和5)比较,同理,小的浮上去,大的沉下去;

如此进行5次,得到8  5  4  2  0  9 的顺序,可以看到最大的数9已经“沉底”。其他数各自向上浮起一个位置。

第二趟:

8


5

5

5

5

5

8


4

4

4

4

4

8


2

2

2

2

2

8


0

0

0

0

0

8

第1次

第2次

第3次

第4次

结果

然后进行第2趟比较,对余下的5个数(8 5 4 2 0)进行新一轮的比较,以便使次大的数“沉底”。

方法同第1趟,如上表示,经过4次比较,得到次大的数8。

规律总结:

按如此规律进行下去,可以推知,对6个数进行冒泡排序,要比较5趟,才能使6个数按大小排序。

在第1趟要进行两个数之间的比较共5次,在第2趟过程中比较4次,..........,在第5趟只需比较1次。

规律升华:

如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。

下面给出简单c程序:

#include <stdio.h>
int main()
{
    int a[10]; //此数组用于存放输入数据
    int i, j; //循环变量
    int t; //中间变量
    printf("input 10 numbles:\n");  //输入数据提示
    for(i = 0; i < 10; i ++)
        scanf("%d", &a[i]);
    printf("\n");
    //冒泡排序部分
    for(j = 0; j < 9; j ++)   //进行9次循环,实现9趟比较
        for(i = 0; i < 9 - j; i ++)  //在每一趟中进行 9 - j 次比较
            if(a[i] > a[i + 1])
            {
                t = a[i];
                a[i] = a[i + 1];
                a[i + 1] = t;
            }
    printf("the sorted numbers:\n");//排序输出
    for(i = 0; i < 10; i ++)
        printf("%d  ", a[i]);
    printf("\n");
    return 0;
}

Code::Blocks中运行结果如下:

input 10 numbles:

15 25 12 36 52 21 15 45 52 61

the sorted numbers:

12  15  15  21  25  36  45  52  52  61

持续更新中......



关于排序的好文推荐

猜你喜欢

转载自blog.csdn.net/Reborn_Lee/article/details/80569489