chimier-c++-day05

2021-08-12  本文已影响0人  __method__

数组的遍历

#include <iostream>
using namespace std;

int main(){
    double arr[] = {1, 2, 3, 4, 5, 6,7, 9};
    cout << sizeof(arr)<< endl;
    cout << sizeof(arr[0])<< endl;// 整个数组占用的空间
    int len =sizeof(arr)/sizeof(arr[0]); // 一个元素占用的空间
    // 数组的遍历 : 将数组元素一个一个取出然后进行某些操作
//    for (int i = 0; i < len; ++i) {
//        cout << arr[i] << endl;
//    }
//
    for (int i = 0; i < len; ++i) {
        if (arr[i] == 7)
            cout << "7 在数组里面呢"<< endl;
    }
}

求数组的最大值

#include <iostream>
using namespace std;

int main(){
    // 五只小猪称重 谁最重
    // 就是求数组中的最大值
//    int arr[6] = {1300,350,200,400,250, 3200};
    int arr[6];
    cout << "请分别输入6只猪猪的重量"<<endl;
    // 1300 350 22200 400  250 3200
    for (int i = 0; i < 6; ++i)
        cin >> arr[i];
    int maxWeight = arr[0]; // 假设第一只猪最重
    int index = -1;
    int len = sizeof(arr)/sizeof(arr[0]);
    for (int i = 0; i < len; ++i) {
        if (arr[i] >= maxWeight){
            maxWeight = arr[i];
            index = i+1;
        }
    }
    cout << "最重的小猪是第: "<< index <<"只 重量是: "<<maxWeight <<" kg"<<endl;
}

反转数组

#include <iostream>
using namespace std;

int main(){
    // 交换两个变量
    //    int a = 100;
    //    int b = 300;
    //    int temp;
    //    temp = a;
    //    a = b;
    //    b = temp;
    //    cout << a<< endl;
    //    cout << b<< endl;
    int arr[] = {1, 3, 5, 2, 4, 29, 47, 33};
    // 反转数组
    int len = sizeof(arr)/sizeof(arr[0]);

    for (int i = 0; i < len/2; ++i) {
        int temp;
        temp = arr[i];
        arr[i] = arr[len-1-i];
        arr[len-1-i] = temp;
    }

    for (int i = 0; i < len; ++i) {
        cout << arr[i]<< "\t";
    }

}

方法二

#include <iostream>
using namespace std;

int main(){
    int arr[] = {1, 3, 5, 2, 4, 29, 47, 33};
    // 反转数组
    int len = sizeof(arr)/sizeof(arr[0]);
    int temp;
//    for (int min=0, max=len-1;min <= max ;max--, min++ ) {
    for (int left=0, right=len-1;left <= right ;right--, left++ ) {
            // 交换
            temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
    }

    for (int i = 0; i < len; ++i) {
        cout << arr[i]<< "\t";
    }

}

冒泡排序

冒泡排序就是重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字
的位置”这一操作的算法。在这个过程中,数字会像泡泡一样,慢慢从右往左“浮”到序列的
顶端,所以这个算法才被称为“冒泡排序”。









在冒泡排序中,第 1 轮需要比较 n -1 次,第 2 轮需要比较 n -2 次……第 n -1 轮需
要比较 1 次。因此,总的比较次数为 (n -1) +(n -2) +…+1 ≈ n^2
/2。这个比较次数恒定为该数值,和输入数据的排列顺序无关。
不过,交换数字的次数和输入数据的排列顺序有关。假设出现某种极端情况,如输
入数据正好以从小到大的顺序排列,那么便不需要任何交换操作;反过来,输入数据要
是以从大到小的顺序排列,那么每次比较数字后便都要进行交换。因此,冒泡排序的时
间复杂度为 O(n^2)。
一层循环/右侧开始版

#include <iostream>
using namespace std;

int main(){
    int arr[] = { 4,2,8,6,5,7,9, 1,3 };
    int len = sizeof(arr)/sizeof(arr[0]);
    for (int j = len-1; j > 0; --j) {
        if (arr[j-1] > arr[j]){
            int temp = arr[j-1];
            arr[j-1] = arr[j];
            arr[j] = temp;
        }
    }
    for (int i = 0; i < len; ++i) {
        cout << arr[i]<< "\t";
    }
    cout << endl;
    cout << "====================================="<< endl;
    for (int j = len-1; j > 1; --j) {
        if (arr[j-1] > arr[j]){
            int temp = arr[j-1];
            arr[j-1] = arr[j];
            arr[j] = temp;
        }
    }
    for (int i = 0; i < len; ++i) {
        cout << arr[i]<< "\t";
    }
    cout << endl;
    cout << "====================================="<< endl;
    for (int j = len-1; j > 2; --j) {
        if (arr[j-1] > arr[j]){
            int temp = arr[j-1];
            arr[j-1] = arr[j];
            arr[j] = temp;
        }
    }
    for (int i = 0; i < len; ++i) {
        cout << arr[i]<< "\t";
    }
    cout << endl;
    cout << "====================================="<< endl;



    for (int j = len-1; j > 3; --j) {
        if (arr[j-1] > arr[j]){
            int temp = arr[j-1];
            arr[j-1] = arr[j];
            arr[j] = temp;
        }
    }
    for (int i = 0; i < len; ++i) {
        cout << arr[i]<< "\t";
    }
    cout << endl;
    cout << "====================================="<< endl;

    for (int j = len-1; j > 4; --j) {
        if (arr[j-1] > arr[j]){
            int temp = arr[j-1];
            arr[j-1] = arr[j];
            arr[j] = temp;
        }
    }
    for (int i = 0; i < len; ++i) {
        cout << arr[i]<< "\t";
    }
    cout << endl;
    cout << "====================================="<< endl;
}


两层最右版

#include <iostream>
using namespace std;

int main(){
    int arr[] = { 4,2,8,6,5,7,9, 1,3 };
    int len = sizeof(arr)/sizeof(arr[0]);
    for (int i = 0; i < len-1; ++i) {
        for (int j = len-1; j > 0; --j) {
            if (arr[j-1] > arr[j]){
                int temp = arr[j-1];
                arr[j-1] = arr[j];
                arr[j] = temp;
            }
        }
        for (int i = 0; i < len; ++i) {
            cout << arr[i]<< "\t";
        }
        cout << endl;
        cout << "====================================="<< endl;
    }
}

左侧开始版

#include <iostream>
using namespace std;

int main(){
    int arr[] = { 4,2,8,0,5,7,9, 1,3 };
    int len = sizeof(arr)/sizeof(arr[0]);
    // len-1-i 每次最右面的值是最大的,不用比较
    for (int i = 0; i < len-1; ++i) {
        for (int j = 0; j < len-1-i; ++j) {
            if (arr[j] > arr[j+1]){
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }

    for (int i = 0; i < len; ++i) {
        cout << arr[i]<< "\t";
    }
}

上一篇 下一篇

猜你喜欢

热点阅读