用c++顺序表A中前m个元素有序,后n个元素有序,设计一个算法,使得整个顺序表有序,要求算法空间复杂度为O(1)。
时间: 2023-05-30 09:02:33 浏览: 173
顺序表用C++实现
算法思路:
1. 从前往后找到第一个大于等于后n个元素的第一个元素a。
2. 从后往前找到第一个小于前m个元素的最后一个元素b。
3. 将a到b之间的元素与后n个元素交换位置。
4. 对前m+n个元素进行快速排序。
时间复杂度:O(m+nlogn)
空间复杂度:O(1)
代码实现:
void sort(int A[], int m, int n) {
int i = 0, j = m + n - 1;
while (i < j && A[j] <= A[j - 1]) {
j--;
}
while (i < j && A[i] <= A[j]) {
i++;
}
for (int k = 0; k < n; k++) {
swap(A[i + k], A[m + k]);
}
quicksort(A, 0, m + n - 1);
}
阅读全文