zoukankan      html  css  js  c++  java
  • 冒泡排序


    ## 冒泡排序
    
    ---
    
    ```c
    #include<stdio.h>
    #include<windows.h>
    #include<stdlib.h>
    #include<stdbool.h>
    #define MAXSIZE 21
    #define defaultlength 8
    int defaultData[3][defaultlength] = { {999,11,22,33,44,55,8,3},
                                        {999,9,3,15,6,66,77,88},
                                        {999,11,88,55,33,66,22,77} };
                                            //默认数组
    
    void Swapen(int* num1, int* num2);
    int showMainMenu();
    void BubbleSort1(int dataHandle[], int n);
    void BubbleSort2(int dataHandle[], int n);
    void BubbleSort3(int dataHandle[], int n);
    /*
    设置数组长度为N
    1.比较相邻的前后两个数据,如果前面数据大于后面的数据,就将两个数据交换
    2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置
    3.N = N-1,如果N不为0就重复前面两步,否则完成排序
    */
    
    int showMainMenu() {
        int num;
        printf("
                                           
    ");
        printf("    ============================
    ");
        printf("    冒泡排序的三种实现
    ");
        printf("    ============================
    ");
        int j = 3;
        while (j > 0) {
            printf("第%d组数字是: ",4-j);
            for (int i = 1; i < defaultlength; i++) {
                printf("%d ", defaultData[j - 1][i]);
            }
            printf("
    ");
            j--;
        }
        printf("请选择一组数字进行排序:");
        scanf_s("%d",&num);
        
    }
    
    void Swapen(int* num1, int* num2) {
        int temp;
        temp = *num1;
        *num1 = *num2;
        *num2 = temp;
    }
    
    //冒泡排序1
    void BubbleSort1(int dataHandle[], int n) {
        int i, j, countTraverse;
        int timeMove = 0;
        int timeCompare = 0;
    
        for (i = 0; i < n; i++) {
            for (j = 2; j <= n - i; j++) {
                timeCompare++;
                if (dataHandle[j - 1] > dataHandle[j]) {
                    Swapen(&dataHandle[j - 1], &dataHandle[j]);
                    timeMove += 3;
                    for (countTraverse = 1; countTraverse <= n; countTraverse++) {
                        printf("%d ",dataHandle[countTraverse]);
                    }
                    printf("
    ");
                }
            }
        }
        printf("一共比较了%d次。
    ", timeCompare);
        printf("移动的总次数为:%d
    ", timeMove);
    }
    
    /*
    设置一个标志,如果这一趟发生了交换,则为true,否则为false。
    明显如果有一趟没有发生交换,说明排序已经完成
    */
    void BubbleSort2(int dataHandle[], int n) {
        int j, k, countTraverse;
        bool flag;
        int timeMove = 0;
        int timeCompare = 0;
        k = n;
        flag = true;
        while (flag) {
            flag = false;
            for (j = 2; j <= k; j++) {
                timeCompare++;
                if (dataHandle[j - 1] > dataHandle[j]) {
                    Swapen(&dataHandle[j - 1], &dataHandle[j]);
                    timeMove += 3;
                    for (countTraverse = 1; countTraverse <= n; countTraverse++) {
                        printf("%d ", dataHandle[countTraverse]);
                    }
                    printf("
    ");
                    flag = true;
                }
            }
            k--;
        }
        printf("一共比较了%d次。
    ", timeCompare);
        printf("移动的总次数为:%d
    ", timeMove);
    }
    /*
    每循环一次会有一个最大值,但是第二次还是会从第一个到n-i个进行比较
    如果后面大部分已经确定了顺序,即下一次循环是不是需要到n-i
    */
    void BubbleSort3(int dataHandle[], int n) {
        int j, k, countTraverse;
        int flag;
        int timeMove = 0;
        int timeCompare = 0;
        flag = n;
        while (flag > 0) {
            k = flag;
            flag = 0;
            for (j = 2; j <= k; j++) {
                timeCompare++;
                if (dataHandle[j - 1] > dataHandle[j]) {
                    Swapen(&dataHandle[j - 1], &dataHandle[j]);
                    flag = j;
                    timeMove += 3;
                    for (countTraverse = 1; countTraverse <= n; countTraverse++) {
                        printf("%d ", dataHandle[countTraverse]);
                    }
                    printf("
    ");
                }
            }
        }
        printf("一共比较了%d次。
    ", timeCompare);
        printf("移动的总次数为:%d
    ", timeMove);
    }
    
    
    int main() {
        int returnvalue;           //如果选择对一段进行排序 使用此变量
        system("color f0");
        returnvalue = showMainMenu();
        system("cls");
        //选择判断添加代码
        //可以循环,或者单独填写函数名称和传入参数
        return 0;
    }
    ```
  • 相关阅读:
    [转]在 javascript 按键事件中,按键值的对照表
    表达式树(Expression Tree)
    WPF之路——用户控件对比自定义控件UserControl VS CustomControl)
    wpf创建用户控件(计时器控件)
    WPF 命令
    WPF自定义DataGrid分页控件
    WPF ----在UserControl的xaml里绑定依赖属性
    wpf 自定义ListBox
    WPF 自定义NotifyPropertyChanged
    WPF 使用附加属性增加控件属性
  • 原文地址:https://www.cnblogs.com/WineinSeptember/p/12775558.html
Copyright © 2011-2022 走看看