当前位置 博文首页 > ice_elephant的博客:数据结构算法之冒泡排序

    ice_elephant的博客:数据结构算法之冒泡排序

    作者:[db:作者] 时间:2021-09-16 15:46

    冒泡排序

    当我们采用前面的选择排序时,我们仍然要将候选者遍历 5 遍,才能完成最终的排序,但其
    实,本身这些美女出了第一个外,已经很有序了,我们只需要把第一个和第二个交换,然后又和
    第三个交换,如此循环,直到和最后一个交换后,整个数组基本就有序了!
    161 171 163 165 167 169
    第一次交换
    161 163 171 165 167 169
    第二次交换
    161 163 165 171 167 169
    第三次交换
    161 163 165 167 171 169
    第四次交换
    161 163 165 167 169 171
    161 163 165 167 169 171
    第五次交换
    当然,并不是每次都这么幸运,像下面的情况就会更复杂一些,一趟并不能完全解决问题,
    我们需要多趟才能解决问题.
    经过上述五步后,得到的结果:
    161 165 163 167 169 171
    此时,我们只保障了最后一个数是最大的, 并不能保障前面的数一定会有序,所以,我们继续按
    照上面五步对剩下的 5 个数继续进行一次排序,数组就变得有序了.
    以上过程就是 冒泡排序: 通过重复地遍历未排序的数列,一次比较两个元素,如果它们的顺
    序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列
    已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢得像泡泡一样“浮”到数
    列的顶端,故而得名!
    161 171 165 163 167 169

    #include <stdio.h>
    #include <stdlib.h>
    void swap(int *num1,int *num2) //交换两个指针所指向得的元素的值
    {
    int temp = *num1;
    *num1 = *num2;
    *num2 = temp;
    }
    void BubbleSort(int arr[], int len){
    for(int i=0; i< len - 1; i++){
    for(int j = 0; j< len-1-i; j++){
    bool sorted = true;
    if(arr[j]>arr[j+1]){
    swap(&arr[j], &arr[j+1]);
    sorted = false;
    }
    if(sorted) break;
    }
    }
    }
    int main(void){
    int beauties[]={163, 161, 158, 165, 171, 170, 163, 159, 162};
    int len = sizeof(beauties)/sizeof(beauties[0]);
    BubbleSort(beauties, len);
    printf("美女排序以后的结果是:\n");
    for(int i=0; i<len; i++){
    printf("%d ", beauties[i]);
    }
    system("pause");
    return 0;
    }
    
    cs