Ý tưởng
Ý tưởng của thuật toán này là bắt cặp tất cả các phần tử trong dãy cần sắp xếp và đổi chỗ hai phần tử trong cặp nếu chúng nghịch thế (không thỏa điều kiện thứ tự).
Để bắt cặp tất cả các phần tử trong dãy, ta dùng 2 vòng lặp. Vòng lặp ngoài sẽ chạy từ đầu dãy đến phần tử kế cuối. Vòng lặp trong sẽ chạy từ phần tử tiếp theo của vị trí đang xét ở vòng lặp ngoài. Mỗi lần xét ta sẽ so sánh 2 phần tử trong cặp. Nếu chúng nghịch thế thì sẽ hoán đổi vị trí của chúng.
Ta thấy sau mỗi lần duyệt ở vòng lặp ngoài ta sẽ được phần tử đầu tiên đứng đúng thứ tự yêu cầu. Cứ thực hiện đến hết dãy ta sẽ được một dãy đã sắp xếp
Cài đặt
Mã dưới đây được cài đặt theo ngôn ngữ C/C++ với yêu cầu sắp xếp dãy tăng dần
void InterchangeSort(int *a, int n) { for (int i = 0; i < n-1; i++) for (int j = i+1; j < n; j++) if (a[i] > a[j]) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } }
Đánh giá
Số phép so sánh của thuật toán này không đổi, không phụ thuộc tình trạng ban đầu của dãy. Phần tử thứ i được so sánh với n-i phần tử còn lại nên có thể ước lượng số phép so sánh bằng: (n-1) + (n-2) + ... + 1 = n(n - 1)/2.
Tuy nhiên số phép hoán vị (3 phép gán) lại phụ thuộc tình trạng ban đầu. Trong trường hợp tốt nhất, tức dãy đã được sắp xếp hoàn toàn thì không cần phải hoán vị, nên số phép hoán vị là: 0.
Trường hợp xấu nhất, tức dãy có thứ tự ngược với yêu cầu. Mỗi lần so sánh ta lại phải hoán vị nên số phép hoán vị là: n(n - 1)/2.
Độ phức tạp của thuật toán này là: O(n²)
Cho 2 số nguyên a&b .hãy hoán đổi 2 số nguyên đó theo yêu cầu:xác định bài toán,ý tưởng,xây dựng thuật toán bằng liệt kê và sơ đồ khối.
Trả lờiXóaBài này làm như nào ạ
cho em hỏi là tại sao vòng for thứ nhất là i= n-1 ạ
Trả lờiXóavd cho 5 số: 5 4 3 2 1
Xóanó sẽ sắp xếp từ 5->1
khi nó sắp được 4 con, thì chắc chắn con cuối sẽ lớn nhất
cái này khác gì nổi bọt
Trả lờiXóanổi bọt là sắp xếp giữa a[j] và a[j-1]
Xóacòn đổi chỗ trực tiếp sắp xếp giữa a[i] và a[j]
Nếu không khác gì thì gộp 2 thuật toán lại đi chứ tạo 2 cái làm gì bạn
AD giúp e với,dùng thuật toán đổi chỗ trực tiếp (InterchangeSort) để thực hiện sắp xếp 1 mảng bất kỳ,tăng dần và giảm dần . Nhập 1 số bất kỳ từ bàn phím và kiểm tra xem số đó có trong mảng hay không ?Nếu không có thực hiện chèn vào mảng và sắp xếp tăng dần,giảm dần
Trả lờiXóa