using namespace std;
void merge(vector& A, int p, int q, int r) {
int len1 = q - p + 1;
int len2 = r - q;
vector L(len1 + 1, 0);
vector R(len2 + 1, 0);
for (int i = 0; i < len1; i++) {
L[i] = A[p + i];
}
for (int j = 0; j < len2; j++) {
R[j] = A[q + 1 + j];
}
L[len1] = INT_MAX;
R[len2] = INT_MAX;
int i = 0, j = 0;
for (int k = p; k < r; k++) {
if (L[i] <= R[j]) {
A[k] = L[i];
i++;
} else {
A[k] = R[j];
j++;
}
}
}
void mergeSort(vector& a, int p, int r) {
if (p < r) {
int q = (p + r) / 2;
mergeSort(a, p, q);
mergeSort(a, q + 1, r);
merge(a, p, q, r);
}
}
int main() {
int n;
cout << "Please input the number of non-negative numbers:" << endl;
cin >> n;
vector a(n, 0);
cout << "Please input " << n << " non-negative numbers:" << endl;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
mergeSort(a, 0, n - 1);
for (int j = 0; j < n; j++) {
cout << a[j] << " ";
}
return 0;
}
這段代碼實現了歸并排序算法,并對輸入的非負整數數組進行了排序。首先,它定義了一個merge函數,用于合并兩個有序數組。接下來,mergeSort函數遞歸地對數組進行排序。在主函數中,用戶可以輸入非負整數的個數和具體的數值,程序將輸出排序后的結果。
歸并排序是一種穩定的排序算法,具有O(n log n)的時間復雜度。它通過將數組分成較小的部分,然后合并這些部分來實現排序。這種方法確保了排序的正確性,同時保持了算法的穩定性。
需要注意的是,代碼中使用了STL中的vector容器來存儲數組,這使得代碼更加簡潔和易讀。同時,代碼中添加了邊界條件處理,以確保算法的正確性和健壯性。