++ алгоритм сортировки C обучение дневника / 4 класса

#include <iostream>

using namespace std;

void Swap(int& a, int& b){
    int tmp = a;
    a = b;
    b = tmp;
}

void print(int* arr, int len){
    for(int i = 0; i < len; i++){
        cout<<arr[i]<<", ";
    }
    cout<<endl;
}

void sort1(int *arr, int len){
    bool flag;
    for(int i = 0; i < len; i++){
        flag = true;
        for(int j = 1; j < len-i; j++){
            if(arr[j-1] > arr[j]){
                Swap(arr[j-1], arr[j]);
                flag = false;
            }
        }
        if(flag){
            break;
        }
    }
}

void sort2(int* arr, int len){
    bool flag;
    for(int i = 0; i < len; i++){
        flag = true;
        for(int j = len-1; j > i; j--){
            if(arr[j] < arr[j-1]){
                Swap(arr[j], arr[j-1]);
                flag = false;
            }
        }
        if(flag){
            break;
        }
    }
}

void sort3(int* arr, int len){
    int Min;
    int index;
    bool flag;
    for(int i = 0; i < len; i++){
        Min = arr[i];
        index = i;
        flag = false;
        for(int j = i; j < len; j++){
            if(j == i){
                continue;
            }
            if(arr[j] < Min){
                Min = arr[j];
                index = j;
                flag = true;
            }
        }
        if(flag){
            Swap(arr[i],  arr[index]);
        }
    }
}

int get_index(int* arr, int left, int right){
    int index = arr[left];
    while(left < right){
        while(left<right && arr[right]>index){
            right--;
        }
        if(left < right){   //交换的前提
            Swap(arr[left], arr[right]);
            left++;     //减去和之前交换过index小的数再比较一次
        }
        while(left<right && arr[left]<=index){
            left++;
        }
        if(left < right){
            Swap(arr[left], arr[right]);
            right--;    //减去和之前交换过index小的数再比较一次
        }
    }
    return left;
}

void quick_sort(int* arr, int left, int right){
    int index;
    if(left < right){
        index = get_index(arr, left, right);
        quick_sort(arr, index+1, right);
        quick_sort(arr, left, index-1);
    }else{
        return;
    }
}

int main(){
    //定义一维数组长度
    const int len = 10;
    //定义arr1一维数组
    int arr1[len] = {3,1,2,4,5,0,9,8,6,7};
    //sort3 测试
    print(arr1, len);
    sort3(arr1, len);
    print(arr1, len);

    //sort2()
    int arr2[len] = {3,1,2,4,5,0,9,8,6,7};
    print(arr2, len);
    sort2(arr2, len);
    print(arr2, len);

    //sort1()
    int arr3[len] = {3,1,2,4,5,0,9,8,6,7};
    print(arr3, len);
    sort1(arr3, len);
    print(arr3, len);

    cout<<"--------------------------------------"<<endl;

    //再测试
    int arr_0[len] = {0,1,2,3,4,5,6,7,8,9};
    print(arr_0, len);
    sort1(arr_0, len);
    print(arr_0, len);

    int arr_1[len] = {0,1,2,3,4,5,6,7,8,9};
    print(arr_1, len);
    sort2(arr_1, len);
    print(arr_1, len);

    int arr_2[len] = {0,1,2,3,4,5,6,7,8,9};
    print(arr_2, len);
    sort3(arr_2, len);
    print(arr_2, len);

    cout<<"-------------------------------------"<<endl;

    //再测试
    int arr_a[len] = {10,9,8,7,6,5,4,3,2,1};
    print(arr_a, len);
    sort1(arr_a, len);
    print(arr_a, len);

    int arr_b[len] = {10,9,8,7,6,5,4,3,2,1};
    print(arr_b, len);
    sort2(arr_b, len);
    print(arr_b, len);

    int arr_c[len] = {10,9,8,7,6,5,4,3,2,1};
    print(arr_c, len);
    sort3(arr_c, len);
    print(arr_c, len);

    cout<<"-------------------------------------"<<endl;

    //quick_sort()测试
    int arr_A[len] = {3,1,2,4,5,0,9,8,6,7};
    print(arr_A, len);
    quick_sort(arr_A, 0, len-1);
    print(arr_A, len);

    //再测试
    int arr_B[len] = {1,2,3,4,5,6,7,8,9,10};
    print(arr_B, len);
    quick_sort(arr_B, 0, len-1);
    print(arr_B, len);

    //最后测试
    int arr_C[len] = {10,9,8,7,6,5,4,3,2,1};
    print(arr_C, len);
    quick_sort(arr_C, 0, len-1);
    print(arr_C, len);

}
欢迎指出错误的地方,因为是学习过程中的原代码,没有太多算法解释
Опубликовано 31 оригинальные статьи · вона похвала 3 · просмотров 10000 +

рекомендация

отblog.csdn.net/qq_36557960/article/details/78566860