zoukankan      html  css  js  c++  java
  • 经典算法学习——冒泡排序

          冒泡排序是我们学习的第一种排序算法。应该也算是最简单、最经常使用的排序算法了。

    无论怎么说。学会它是必定的。

    今天我们就用C语言来实现该算法。

    演示样例代码已经上传至:https://github.com/chenyufeng1991/BubbleSort

    算法描写叙述例如以下:

    (1)比較相邻的前后两个数据。假设前面数据大于后面的数据,就将两个数据交换;

    (2)这样对数组的第0个数据到N-1个数据进行一次遍历后。最大的一个数据就到了最后一个位置,也就是下标为N-1的位置(沉到了水底)。

    (3)N = N-1,假设N不为0就反复(1)(2)两步,否则排序完毕。也就是对数组的第0个数据到N-2个数据再次进行遍历;


    完整的代码实现例如以下:

    //
    //  main.c
    //  BubbleSort
    //
    //  Created by chenyufeng on 16/1/28.
    //  Copyright © 2016年 chenyufengweb. All rights reserved.
    //
    
    
    #include <stdio.h>
    
    typedef int BOOL;
    #define true 1
    #define false 0
    
    int *bubbleSort01(int arr[],int len);
    void bubbleSort03(int arr[],int len);
    
    int main(int argc, const char * argv[]) {
    
        int array[7] = {150,111,1000,99,300,10,189};
    
        /**
         *指针向后移位;
         */
    
        //    int *p = bubbleSort02(array, 7);
        //
        //    for (int i = 0; i < 7; i++) {
        //        printf("%d ",*(p+i));
        //    }
    
        /**
         *  能够使用传引用的方式,实现例如以下;
         这里不须要返回值,直接打印就可以,推荐使用这样的方式,方便。
         */
        bubbleSort04(array, 7);
        for (int i = 0; i < 7; i++) {
            printf("%d ",array[i]);
        }
    
        return 0;
    }
    
    //常规的冒泡;
    int *bubbleSort01(int arr[],int len){
    
        int temp;
        for (int i = 0; i < len; i++){
            for (int j = 1; j < len - i; j++) {
                if (arr[j - 1] > arr[j]) {
    
                    temp = arr[j - 1];
                    arr[j - 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return arr;
    }
    
    //常规的冒泡,不须要返回值。
    void bubbleSort03(int *arr,int len){
    
        int temp;
        for (int i = 0; i < len; i++){
            for (int j = 1; j < len - i; j++) {
                if (arr[j - 1] > arr[j]) {
    
                    temp = arr[j - 1];
                    arr[j - 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }
    


    当然也能够把上面的交换元素的代码抽取出来。写成一个交换函数swap。

    代码实现例如以下:

    //
    //  main.c
    //  BubbleSort
    //
    //  Created by chenyufeng on 16/1/28.
    //  Copyright © 2016年 chenyufengweb. All rights reserved.
    //
    
    
    #include <stdio.h>
    
    typedef int BOOL;
    #define true 1
    #define false 0
    
    int *bubbleSort01(int arr[],int len);
    void swap(int *a,int *b);
    
    int main(int argc, const char * argv[]) {
    
        int array[7] = {150,111,1000,99,300,10,189};
    
        /**
         *指针向后移位;
         */
    
        //    int *p = bubbleSort02(array, 7);
        //
        //    for (int i = 0; i < 7; i++) {
        //        printf("%d ",*(p+i));
        //    }
    
        /**
         *  能够使用传引用的方式。实现例如以下;
         这里不须要返回值。直接打印就可以,推荐使用这样的方式,方便;
         */
        bubbleSort01(array, 7);
        for (int i = 0; i < 7; i++) {
            printf("%d ",array[i]);
        }
    
        return 0;
    }
    
    //常规的冒泡。
    int *bubbleSort01(int arr[],int len){
    
        int temp;
        for (int i = 0; i < len; i++){
            for (int j = 1; j < len - i; j++) {
                if (arr[j - 1] > arr[j]) {
    
    //                temp = arr[j - 1];
    //                arr[j - 1] = arr[j];
    //                arr[j] = temp;
    
                    //这里也能够使用swap交换函数;
                    swap(&arr[j - 1], &arr[j]);
                }
            }
        }
        return arr;
    }
    
    
    void swap(int *a,int *b){
    
        int temp;
        temp = *a;
        *a = *b;
        *b = temp;
    }
    
    
    



    交换类排序:借助数据元素之间的相互交换进行排序的一种方法。如冒泡排序、高速排序。

    插入类排序:将无序的各个元素依次插入到已经有序的线性表中。如直接插入排序、希尔排序。

    选择排序:扫描整个线性表,选出最小的元素。将它交换到表的最前面。然后对剩下的继续相同的方法,直到子表为空。如直接选择排序、堆排序。



         说明下,冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1).是一种稳定的排序。



    本文參考:http://blog.csdn.net/morewindows/article/details/6657829
  • 相关阅读:
    Linux-解决putty无法直接使用root用户远程登录linux主机的问题
    Linux-安装jdk
    Linux-安装谷歌浏览器
    Linux-安装ssh服务
    java正则表达式匹配文本中想要的字符串
    日常技术资源收集
    《java编程思想》:散列的原理
    《java编程思想》:字符串
    win10完美去除快捷方式小箭头
    WS_2012
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7082226.html
Copyright © 2011-2022 走看看