Nhập và in ra mảng có thứ tự tăng dần

array=[]
print("Nhập số phần tử có trong mảng: ",end="")
x=int(input())
for i in range(x):
	print("Phần tử thứ "+str(i+1)+" là: ")
	a=int(input())
	array.append(a)
for i in range(x-1):
	for j in range(i+1,x):
		if array[i]>array[j]:
			tg=array[i]
			array[i]=array[j]
			array[j]=tg
print("Mảng sau khi sắp xếp là:",array)

Đây là thuật toán sắp xếp mảng(chỉ chứa kiểu int) theo thứ tự tăng dần. Mình ko hiểu sao 2 cái lệnh in cuối ko chạy (mình chạy trên terminal). nó chỉ in dc ra mảng tăng dần nhưng ko có 2 lệnh in đấy. Help me!!!

code của bạn đúng rồi mà, thử lại lần nữa xem.
nhưng mà nhìn như code c ấy

x = int(input("Nhập số phần tử có trong mảng: "))
array = [int(input("Phần tử thứ " + str(i + 1) + " là: ")) for i in range(x)]
for i in range(x-1):
	for j in range(i+1, x):
		if array[i] > array[j]:
			array[i], array[j] = array[j], array[i]
print("Mảng sau khi sắp xếp là:", array)
3 Likes

Ủa, vậy code ntn ms chuẩn, m nghĩ ra dc mỗi cái này à.Đề là nhập vào một mảng, in ra màn hình thứ tự tăng dần của mảng

Nếu đề chỉ nói là sắp xếp mảng không thôi, không cấm dùng hàm có sẵn thì dùng luôn hàm sorted hoặc method sort có sẵn của Python luôn cho nhanh, vừa code nhanh hơn, vừa chạy nhanh hơn (không có sự khác biệt lớn nếu dữ liệu đầu vào nhỏ). Bubble sort có độ phức tạp là O(n^2), trong khi hàm sorted và method sort dùng thuật toán Timsort có độ phức tạp ở trường hợp tệ nhất chỉ là O(n log n).

so_phan_tu = int(input("Nhập số phần tử có trong mảng: "))
list = []
for i in range(so_phan_tu):
    data_input = int(input(f"Phần tử thứ ${i + 1} là:"))
    list.append(data_input)
print("Mảng sau khi sắp xếp là:", sorted(list))

P/s: Bạn nên tìm hiểu thêm về String formatting và String interpolation chứ làm theo kiểu cộng chuỗi cổ điển dễ gây “đau mắt” lắm.

7 Likes

Câu này là biết lấy của bên C chép qua rồi :smiley: Python quất 2 dòng như sau:

numbers = [int(v) for v in input("Nhập dãy số: ").split(" ")]
print("Dãy số đã sắp xếp: ", sorted(numbers))
7 Likes

Thật ra năm lớp 8 có học qua Pascal và cx đi thi dc giải cao và hứng thú vs cái mới nên chọn Python chứ tui ko có bt C. Trình độ Pascal thui nha:))))

#1. Python có hàm sort, sort cái là ra liền

#2. Nếu không dùng hàm sort, thì dùng hàm min/max để lấy số nhỏ/lớn nhất trong list, rồi đem sang list mới. Loop cho tới khi hết list

#3. Nếu không xài mấy function cho sẵn đó, thì làm thủ công như này:

LIST_INT = [1, -1, 2, 5, -10, 20, 100, 99, 23, -30]
new_list= []

count = 0 
while LIST_INT:

    # Cái này để chắc ăn thôi, phòng khi sai gì đó thì loop tự exit sau 100 lần
    count = count + 1
    if count > 100:
        print(count)
        break

    # Lấy số đầu tiên trong list, đặt nó là MIN_number
    MIN_number = LIST_INT[0]


    # Duyet tung so trong list
    for number in LIST_INT:

        # nếu số vừa duyệt nhỏ hơn số MIN_number...
        if number < MIN_number:

            # ...thì MIN_number có giá trị mới
            MIN_number = number
    # khi kết thúc vòng for này, thì MIN_number sẽ là số nhỏ nhất trong list 

    # chuyển số MIN_number qua list mới
    new_list.append(MIN_number)
    # xoá item (tuong đương MIN_number) ở list cũ
    LIST_INT.remove(MIN_number)

    # sẽ loop lại từ đầu, 1 lần while, 1 lần for, cứ vậy cho tới khi nào hết các item trong list
    # khi list empty thì while tự exit

print(new_list)

Output:

[-30, -10, -1, 1, 2, 5, 20, 23, 99, 100]
[Finished in 0.5s]

4 Likes

hì, thanks :kissing_heart: :kissing_heart: :kissing_heart:

code hình như sai, tui nghĩ cái input gộp chung vs for hơi sai

Chơi xấu hơn xíu:

# welcome to the hell
print("Dãy số đã sắp xếp: ", sorted(map(int, input("Nhập dãy số: ").split())))

Code không hề sai, đây là Python.

4 Likes

sorry tui cóp thiếu :sweat_smile: :sweat_smile: :sweat_smile:

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