c++ day06

作者: __method__ | 来源:发表于2021-02-03 20:03 被阅读0次

    反转数组

    #include <iostream>
    # define N 9
    using namespace std;
    void inverse(int b[N]){
        for (int i = 0; i < N/2; ++i) {
            // 等同于交换变量的思想
            int temp = b[i];
            b[i] = b[N -1 - i];
            b[N -1 - i] = temp;
        }
    }
    int main()
    {
        int a[N] = {6, 7, 2, 5, 4, 3, 6, 1, 9};
        // 反转数组
        inverse(a);
        // 输出数组
        for (int i = 0; i < N; ++i) {
            cout << a[i]<<"\t";
        }
    }
    

    冒泡排序

    思想 :将相邻的两个数进行比较, 将小的调到前面



    我们可以看到2这个最小值从最底下像冒泡一样冒到上面

    #include <iostream>
    # define C 6
    using namespace std;
    int count = 0;
    // 冒泡排序: 比较相邻两个数, 小的调到前面
    void bubble_sort(int a[], int n){
        // a[] 要排序的数组  n 为数组中元素个数
        // n - 1 一共启动了多少次 数组的整体全部两两交换
        for (int i = 0; i < n - 1 ; i++) {
            for (int j = 0; j < n - 1 - i; j++) {
                count ++;
                // 比较相邻两个数, 小的调到前面
                if(a[j] > a[j+1]){
                    int temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;}
            }
        }
    }
    int main()
    {
        int a[C] = {8, 4, 9, 6, 5, 2};
        bubble_sort(a, C);
        cout<< "bubble_sort finised"<< endl;
        for (int i = 0; i < C ; ++i) {
            cout<< a[i]<< "\t";
        }
        cout<< "bubble_sort counts"<< endl;
        cout<< count<< endl;
    
    
    }
    

    冒泡排序是一种用时间换空间的算法, 如果有n个元素,那么需要执行的次数(n-1) + (n - 2) +... + 1 = n(n - 1) / 2 所以冒泡排序的时间复杂度O(N^2) , 举个栗子, N= 10^4, n(n - 1) / 2 和 10^8来讲, 大约是 0.5 * N^2的差距, O(N^2)表示的是数量级

    选择排序

    我们正常从头到尾扫描最小的数据, 将数据放到第一个位置, 在将剩余的数组中扫到第二小的值,放到第二个位置, 以此类推

    #include <iostream>
    # define C 6
    using namespace std;
    int count = 0;
    // 冒泡排序: 比较相邻两个数, 小的调到前面
    void select_sort(int a[], int n){
        int i, p, j, temp;
        for (i = 0; i < n -1; i++) {
            p = i; // p是记录最小值的下标,初始值是i的值
            for ( j = i+ 1; j < n; j ++) {
                if(a[j] < a[p]){
                    p = j;// 记录每趟最小元素的下标
                }
            }
            if(p!= i){  // p索引如果等于 i位置的话就不用换了
                int temp = a[p];
                a[p] = a[i];
                a[i] = temp;
            }
        }
    
    }
    int main()
    {
        int a[C] = {8, 4, 9, 6, 5, 2};
        select_sort(a, C);
        cout<< "select_sort finised"<< endl;
        for (int i = 0; i < C ; ++i) {
            cout<< a[i]<< "\t";
        }
        cout<< "select_sort counts"<< endl;
        cout<< count<< endl;
    
    }
    

    相关文章

      网友评论

          本文标题:c++ day06

          本文链接:https://www.haomeiwen.com/subject/fmemtltx.html