Cho một mảng số nguyên n phần tử, n > 0. Sắp xếp mảng tăng dần sao cho phần tử tại vị trí k < n(cho trước) vẫn giữ nguyên vị trí sau khi mảng được sắp xếp.
|
Input: arr[] = {10, 4, 11, 7, 6, 20}, k = 2 Output: arr[] = {4, 6, 11, 7, 10, 20} Input: arr[] = {30, 10, 20} Output: arr[] = {30, 10, 20} |
Các bước làm:
B1: Swap phần tử tại vị trí k với phần tử cuối cùng trong mảng
B2: Sắp xếp mảng từ 0 -> n – 2
B3: Dịch chuyển tất cả các phần tử từ vị trí k sang 1 ô.
B4: Chuyển phần tử cuối cùng về vị trí k
import java.util.Arrays;
public class Main {
public static void sortArrayExceptOne(int[] arr, int n, int k) {
// Chuyển phần tử tại vị trí k về cuối mảng
int tmp = arr[k];
arr[k] = arr[n - 1];
arr[n - 1] = tmp;
// Sắp xếp mảng từ 0 -> n - 2
// Hàm sort của thư viện sẽ hiểu thứ tự 1 -> n nên mình truyền là n - 1
// Mục đích sắp xếp các phần tử từ đầu cho đến phần tử kế cuối
Arrays.sort(arr, 0, n - 1);
// Chuyển các phần tử vị trí k sang 1 ô
for (int i = n - 1;i > k; i--) {
arr[i] = arr[i - 1];
}
// Chuyển phần tử cuối cùng về vị trí k
arr[k] = tmp;
}
public static void main(String[] args) {
int[] arr = {10, 4, 11, 7, 6, 20};
int k = 2;
sortArrayExceptOne(arr, arr.length, k);
for(int e : arr)
System.out.print(e + " ");
}
}
Output: 4 6 11 7 10 20
Độ phức tạp: O(nlogn)
Link đề bài: https://www.geeksforgeeks.org/sorting-array-elements-except-one/