【7】算法排序 (冒泡排序)

中心思想:

  依次比较相邻的两个数.

时间复杂度:

其它博文都没有讲过的一个重要知识点:

  两两相比, 每比一次,最后一个就会被排好序,因此每一次比较的长度逐渐减小

    每轮都是从头开始比较

完整代码

#include <stdio.h>

// 最好的情况,正序
// 最坏的情况,倒序
void PrintSort(int * a, int n)
{
        int i;
        for (i=0; i<n; i++) {
                printf("%d  ", a[i]);
        }
        printf("\n\n");
}

void PopSort(int * a, int n)
{
        int flag = 0;
        int i, j;
        for (i=0; i<n-1; i++) {
                flag = 1;
                for (j=0; j<n-1-i; j++) {
                        if (a[j+1] < a[j]) {
                                flag = 0;
                                a[j] = a[j] ^ a[j+1];
                                a[j+1] = a[j] ^ a[j+1];
                                a[j] = a[j] ^ a[j+1];
                        }
                }

                // 优化,如果没有可排序的数据,说明已经全部有序,没必要再继续比较
                if (flag == 1) {
                        printf("已排好序, i=%d : ", i);
                        break;
                }
        }
        PrintSort(a, n);
}

int main()
{
        int a[11] = {33, 40, 1, 14, 7, 35, 27, 9, 55, 80, 61};
        PopSort(a, 11);

        int b[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        PopSort(b, 10);
}

 

 

 

posted @ 2020-08-28 15:48  欧阳图图的少年成长记  阅读(139)  评论(0编辑  收藏  举报