Code sắp xếp mảng bị sai

Em có một bài như thế này:

Cho một mảng các số nguyên n phần tử arr. Bạn hãy viết chương trình sắp xếp các phần tử của mảng theo thứ tự tăng dần và hiển thị ra màn hình mảng sau khi đã sắp xếp.

Mảng em nhập vào là [3, 5, 5, 7, 4, 2] đáng lẽ ra thì nó phải xếp lại thành [2, 3, 4, 5, 5, 7] nhưng nó lại xếp lại thành như thế này [2, 7, 5, 5, 4, 3] em nhìn mãi vẫn không ra nên có anh chị nào giải thích giúp em với.

import java.util.Scanner;

public class Array {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] arr = new int[n];

		for(int i = 0; i<n; i++){
			arr[i] = sc.nextInt();
		}
	
		for(int i=0; i<n; i++){
			for(int j = 1; j<n; j++){
				if(arr[i] > arr[j]){
					int temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}
		
		for(int i = 0; i<n; i++){
			System.out.print(arr[i] + " ");
		}
	}
}

bạn xem lại thuật toán sắp xếp đã cài đặt đúng như trong sách mô tả chưa

2 Likes

sách nó bảo là sai ở điều kiện j=1 phải là j=i+1 nhưng mình vẫn hiểu tại sao lại sai ở đó.

Cho j = 1 thì có nghĩa là bạn lại xét những phần tử đã sắp xếp (đã đúng vị trí sắp xếp), mà điều này lại làm những phần tử đã sắp xếp bị đổi chỗ 1 lần nữa.

Có lẽ bạn nghĩ rằng: “i = 0, j = i + 1 thì gán luôn j = 1 có phải là xong không?”. Nhưng đây là 2 vòng lặp lồng nhau đấy bạn. i sẽ tăng lên sau mỗi lần lặp và j = i + 1 cũng thế.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?