C++程序 对除一个之外的所有数组元素进行排序
给定一个数组和一个正整数k,按升序对数组进行排序,使得未排序数组中索引K处的元素保持不变,而所有其它元素均被排序。
举例:
Input : arr[] = {10, 4, 11, 7, 6, 20}
k = 2;
Output : arr[] = {4, 6, 11, 7, 10, 20}
Input : arr[] = {30, 20, 10}
k = 0
Output : arr[] = {30, 10, 20}
一种 简单的解决方案 是将给定数组中除k-th以外的所有元素复制到另一个数组中,然后使用排序算法对另一个数组进行排序。最后将排序后的数组再次复制到原始数组中。在复制时跳过k-th元素。
输出
时间复杂度: 排序需要n*log 2 n
时间,因此时间复杂度为O(n*log 2 n)
。
空间复杂度: 创建了temp数组,因此空间复杂度为O(n)。
下面是一种 高效的解决方案 。
- 将k-th元素与最后一个元素交换。
- 对最后一个元素之外的所有元素进行排序。
- 对于从(k+1)-th到最后的每个元素,将它们向前移动一个位置。
- 将k-th元素复制回k位置。
输出
时间复杂度 : 其中n为元素个数,时间复杂度为O(n*log(n))。
辅助空间 : O(1)