• 排序算法积累(1)-----冒泡排序,插入排序,选择排序


    #include<iostream>
    #include<string>
    #include<math.h>
    #include <cstddef>
    #include<stack> //出入栈头文件
    
    using namespace std;
    
    
    void swap(int arr[], int i, int j);
    void Swap(int arr[], int i, int j);
    void bubbleSort(int arr[], int size);
    void insertionSort(int arr[], int size);
    void selectionSort(int arr[], int size);
    int* copyArray(int arr[], int size);
    bool isEqual(int arr1[], int arr2[]);
    
    
    int main()
    {
        int arraya[5] = { 4, 8, 6, 7, 2 };
        int arrayb[5] = { 4, 8, 6, 7, 2 };
        int arrayc[5] = { 4, 8, 6, 7, 2 };
        int arrayd[5] = { 4, 8, 6, 7, 2 };
    
        bubbleSort(arraya, 5); //冒泡排序
        for (int i = 0; i<5; i++)
            cout << arraya[i] << ' ';
        cout << endl;
    
        insertionSort(arrayb, 5); //插入排序
        for (int i = 0; i<5; i++)
            cout << arrayb[i] << ' ';
        cout << endl;
    
        selectionSort(arrayc, 5);//选择排序
        for (int i = 0; i<5; i++)
            cout << arrayc[i] << ' ';
        cout << endl;
    
        int *arraytmp; //复制一个数组
        arraytmp = copyArray(arrayd, 5);
        for (int i = 0; i<5; i++)
            cout << arraytmp[i] << ' ';
        cout << endl;
    
        bool flag;
        flag = isEqual(arraya, arrayb);
        cout << flag << endl;
    
        return 0;
    }
    //交换两个数,此方法只能用于整型数据, 
    void swap(int arr[], int i, int j)
    {
        arr[i] = arr[i] ^ arr[j];
        arr[j] = arr[i] ^ arr[j];
        arr[i] = arr[i] ^ arr[j];
    }
    
    //经典的交换两个数的方法,可用于任意数据类型 ,一般用这个 
    void Swap(int arr[], int i, int j)
    {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    
    //冒泡排序,时间复杂度为O(n2) ,稳定 
    void bubbleSort(int arr[], int size) {
        if (arr == NULL || size < 2) {
            return;
        }
        for (int e = size - 1; e > 0; e--) {
            for (int i = 0; i < e; i++) {
                if (arr[i] > arr[i + 1]) {
                    Swap(arr, i, i + 1);
                }
            }
        }
    }
    
    //插入排序, 时间复杂度为O(n2) ,稳定 
    void insertionSort(int arr[], int size) {
        if (arr == NULL || size < 2) {
            return;
        }
        for (int i = 1; i < size; i++) {
            for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
                Swap(arr, j, j + 1);
            }
        }
    }
    
    //选择排序 ,时间复杂度为O(n2) ,稳定 
    void selectionSort(int arr[], int size) {
        if (arr == NULL || size < 2) {
            return;
        }
        for (int i = 0; i < size; i++) {
            int minIndex = i;
            for (int j = i + 1; j < size; j++) {
                minIndex = arr[j] < arr[minIndex] ? j : minIndex;
            }
            Swap(arr, i, minIndex);
        }
    }
    
    //复制一个数组 
    int* copyArray(int arr[], int size) {
        if (arr == NULL) {
            return NULL;
        }
        int *res;
        res = new int[size];
        for (int i = 0; i < size; i++) {
            res[i] = arr[i];
        }
        return res;
    }
    
    //判断两个数组是否相等 
    bool isEqual(int arr1[], int arr2[]) {
        if ((arr1 == NULL && arr2 != NULL) || (arr1 != NULL && arr2 == NULL)) {
            return false;
        }
        if (arr1 == NULL && arr2 == NULL) {
            return true;
        }
        if (sizeof(arr1) / sizeof(arr1[0]) != sizeof(arr2) / sizeof(arr2[0])) {
            return false;
        }
        for (int i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i++) {
            if (arr1[i] != arr2[i]) {
                return false;
            }
        }
        return true;
    }
  • 相关阅读:
    Effective C++ -- 继承和面向对象设计
    恶意软件&quot;跨平台&quot; 小心钱包很受伤
    定义和实现模板类不能在同一个文件
    确定只出现曾有两位数字数组
    创业公司聘请的第一个雇员值得注意 6 事
    [转] C#-using用法详解
    c#中的序列化
    C#字符串截取
    [转] C#2010 在TreeView控件下显示路径下所有文件和文件夹
    [转] SQL Server中变量的声明和使用方法
  • 原文地址:https://www.cnblogs.com/panlangen/p/7851923.html
Copyright © 2020-2023  润新知