一道题?

晚上hxd发来一道pcr的题

由于pcr玩的少,又没用过尤加利,在确认了尤加利的机制后,正好刚放假有点时间

讨论了一晚上,又用四个选项的算法都测试了一下

先假设每个角色的tp值为10点,满足都相等的条件1-5号列出

建立一个二维数组

arr[][0]:tp值

arr[][1]:位置

分别从小到大用四种排序算法排序

output输出

代码:

#include <iostream>
using namespace std;
int a[5][2] = {{10, 1}, {10, 2}, {10, 3}, {10, 4}, {10, 5}};
//假设1-5号 tp值均为10
void Quick_Sort(int arr[][2], int l, int r) {
    if (r - l > 0) {
        int i = l;
        int j = r;
        int p = arr[l][0];
        int q = arr[l][1];
        while (i < j) {
            while (i < j && arr[j][0] >= p)
                j--;
            swap(arr[i], arr[j]);
            while (i < j && arr[i][0] < p)
                i++;
            swap(arr[i], arr[j]);
        }
        Quick_Sort(arr, l, i - 1);
        Quick_Sort(arr, i + 1, r);
    }
}

void Bubble_Sort(int arr[][2]) {
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5 - i - 1; j++) {
            if (arr[j][0] > arr[j + 1][0]) {
                swap(arr[j], arr[j + 1]);
            }
        }
    }
}

void merge(int List[][2], int low, int mid, int high) {
    int i = low;
    int j = mid + 1;
    int temp[10][2] = {0};
    int k = 0;
    while (i <= mid && j <= high) {
        if (List[i][0] <= List[j][0]) {
            temp[k][0] = List[i][0];
            temp[k++][1] = List[i++][1];
        } else {
            temp[k][0] = List[j][0];
            temp[k++][1] = List[j++][1];
        }
    }
    while (i <= mid) {
        temp[k][0] = List[i][0];
        temp[k++][1] = List[i++][1];
    }
    while (j <= high) {
        temp[k][0] = List[j][0];
        temp[k++][1] = List[j++][1];
    }
    for (i = low, k = 0; i <= high; i++, k++) {
        List[i][0] = temp[k][0];
        List[i][1] = temp[k][1];
    }
}
void Merge_Sort(int List[][2], int low, int high) {
    int mid = (low + high) / 2;
    if (low < high) {
        Merge_Sort(List, low, mid);
        Merge_Sort(List, mid + 1, high);
        merge(List, low, mid, high);
    }
}

void Insert_Sort(int arr[][2], int N) {
    for (int i = 1; i < N; i++) {
        int j;
        int temp = arr[i][0];
        int temp2 = arr[i][1];
        for (j = i; j > 0 && temp < arr[j - 1][0]; j--) {
            arr[j][0] = arr[j - 1][0];
            arr[j][1] = arr[j - 1][1];
        }
        arr[j][0] = temp;
        arr[j][1] = temp2;
    }
}
void output() {
    for (int i = 0; i < 5; i++) {
        printf("%-5d", a[i][1]);
    }
    cout << endl;
    for (int i = 0; i < 5; i++) {
        printf("%-5d", a[i][0]);
    }
    cout << endl;
}
int main() {
    Quick_Sort(a, 0, 4);
    cout << "quick:" << endl;
    output();

    Bubble_Sort(a);
    cout << "bubble:" << endl;
    output();

    Merge_Sort(a, 0, 4);
    cout << "merge:" << endl;
    output();

    Insert_Sort(a, 5);
    cout << "insert:" << endl;
    output();
}

每项排序都分别注释后测试

然而结果都是:

1 2 3 4 5

 

 

所以这道题答案在选项中与否尚不明确

不过也因此复习了一晚上的排序算法(草

posted @ 2021-01-11 01:32  _Sanctuary  阅读(65)  评论(0)    收藏  举报