Thuật toán interchange sort không sắp xếp được chuỗi

mọi người cho em hỏi em dùng thuật toán interchange sort để sắp xếp ntn có đúng k ạ sao em k sắp xếp được chuỗi ạ

void sort(char list[MAXN][21], int *pn) {\

		int i, j;
   	for (i = 0 ; i < *pn-1; i++)
     	for (j = i + 1; j < *pn; j++)
     		if (strcmp(list[i] , list[j]) > 0)
     			{
     				char t[21];
		            strcpy(t, list[j]);
		            strcpy(list[j], list[i]);
		            strcpy(list[i], t);
				}
				
				
}

Không có lệnh xuất ra màn hình, bạn làm thấy bói để đoán biết sắp xếp được hay chưa?

Viết code ra giấy hoặc bảng, trace từng dòng xem code bạn làm cái gì, đọc trên màn hình đố làm được đấy, hoa mắt váng đầu óc lên ngay.

4 Likes

dựa vào đâu bạn đưa ra kết luận này?

1 Like

dạ em có update hình ảnh khi xuất ra terminal rồi đấy ạ em muốn sắp xếp tên theo thứ tự tăng dần của độ dài chuỗi ạ

Nếu bạn muốn sắp xếp theo độ dài chuỗi thì bạn phải lấy ra được độ dài chuỗi đễ so sánh chứ. Hàm strcmp nó kiểm tra từng ký tự và so sánh theo thứ tự trong bảng mã ASCII. Như kết quả cho thấy, code đã chạy đúng mong đợi của việc sử dụng hàm strcmp, H -> M -> N

3 Likes
void print(char list[MAXN][21], int *pn)
{
	int i, j;
   	for (i = 0 ; i < *pn-1; i++)
     	for (j = *pn-1; j > i; j--)
     		if (strcmp(list[j] , list[j-1]) < 0)
     			{
     				char t[21];
		            strcpy(t, list[j]);
		            strcpy(list[j], list[j-1]);
		            strcpy(list[j-1], t);
				}
	for (i = 0; i < (*pn); i++)
		{
			nameStr(list[i]);
			printf("Name[%d] : %s \n", i, list[i]);
		}
	system("pause");
    system("cls");
}

em có thử tham khảo việc dùng bubble sort thì lại ra được kết quả đúng anh ạ

Đúng là sao nữa?!
Theo hình của bạn thì thứ tự Hoang Anh Tuan > Minh Duy > Nguyen Minh Hieu mới là đúng nhé.

1 Like

dạ vâng em cảm ơn mọi người nhiều ạ em đã hiểu r. do em hiểu nhầm một chút nên bị hiểu sai vấn đề ạ

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