【 bài tự - lựa chọn bài tự ưu hoá bản ( lợi dụng đôi bài tự ) 】

Kết hợp lựa chọn bài tự cùng đôi bài tự ý nghĩ, có thể thông qua lợi dụng đôi số liệu kết cấu tới ưu hoá lựa chọn bài tự quá trình, khiến cho bài tự thuật toán càng thêm hiệu suất cao. Tại đây loại kết hợp trung, chúng ta lợi dụng đôi đặc tính tới nhanh chóng định vị cùng lựa chọn chưa bài tự bộ phận nhỏ nhất nguyên tố, tránh cho lựa chọn bài tự trung mỗi lần tuyến tính tìm tòi chi tiêu.

Lựa chọn bài tự cùng đôi bài tự kết hợp ý nghĩ

Lựa chọn bài tự cơ bản tư tưởng là mỗi lần chưa bao giờ bài tự bộ phận lựa chọn nhỏ nhất ( hoặc lớn nhất ) nguyên tố, phóng tới đã bài tự bộ phận cuối cùng. Kết hợp đôi bài tự ý nghĩ, chúng ta có thể lợi dụng nhỏ nhất đôi tới giữ gìn chưa bài tự bộ phận nguyên tố, mỗi lần từ đôi đỉnh lấy ra nhỏ nhất nguyên tố, để vào đã bài tự bộ phận, sau đó điều chỉnh đôi, lấy bảo trì đôi tính chất.

Thực hiện bước đi

  1. Thành lập nhỏ nhất đôi:Đem đãi bài tự số tổ kiến lập thành một cái nhỏ nhất đôi.
  2. Lựa chọn nhỏ nhất nguyên tố:Từ đôi đỉnh ( nhỏ nhất giá trị ) bắt đầu lựa chọn, đem này để vào đã bài tự bộ phận.
  3. Giữ gìn đôi tính chất:Mỗi lần lựa chọn thao tác sau, yêu cầu điều chỉnh đôi, khiến cho còn thừa nguyên tố vẫn như cũ cấu thành nhỏ nhất đôi.
  4. Lặp lại trở lên bước đi:Thẳng đến sở hữu nguyên tố đều bị bài tự.

C ngôn ngữ số hiệu thực hiện

Phía dưới là lợi dụng C ngôn ngữ thực hiện kết hợp lựa chọn bài tự cùng đôi bài tự ý nghĩ thí dụ mẫu số hiệu:

#include<stdio.h>

// hàm số: Đối số tổ tử thụ lấy căn tiết điểm i tiến hành đôi hóa, n là đôi lớn nhỏ
voidheapify(intarr[],intn,inti){
intsmallest=i;// khởi động lại nhỏ nhất giá trị hướng dẫn tra cứu vì i
intleft=2*i+1;// tả tử tiết điểm hướng dẫn tra cứu vì 2*i + 1
intright=2*i+2;// hữu tử tiết điểm hướng dẫn tra cứu vì 2*i + 2

// nếu tả tử tiết điểm so căn tiết điểm tiểu
if(left<n&&arr[left]<arr[smallest])
smallest=left;

// nếu hữu tử tiết điểm so trước mặt nhỏ nhất giá trị tiểu
if(right<n&&arr[right]<arr[smallest])
smallest=right;

// nếu nhỏ nhất giá trị không phải căn tiết điểm
if(smallest!=i){
// trao đổi nhỏ nhất giá trị cùng căn tiết điểm
inttemp=arr[i];
arr[i]=arr[smallest];
arr[smallest]=temp;

// đệ quy điều chỉnh chịu ảnh hưởng tử thụ
heapify(arr,n,smallest);
}
}

// hàm số: Tiến hành đôi bài tự
voidheapSort(intarr[],intn){
// xây dựng đôi ( một lần nữa sắp hàng số tổ )
for(inti=n/2-1;i>=0;i--)
heapify(arr,n,i);

// theo thứ tự từ đôi trung lấy ra nguyên tố
for(inti=n-1;i>0;i--){
// đem trước mặt căn tiết điểm di đến cuối cùng
inttemp=arr[0];
arr[0]=arr[i];
arr[i]=temp;

// đối còn thừa đôi tiến hành đôi hóa
heapify(arr,i,0);
}
}

// hàm số: Lợi dụng đôi bài tự nguyên lý chấp hành lựa chọn bài tự
voidselectionHeapSort(intarr[],intn){
// từ số tổ xây dựng nhỏ nhất đôi
heapSort(arr,n);

// hiện tại arr[0] bao hàm nhỏ nhất nguyên tố, đem này chuyển qua cuối cùng cũng lặp lại
for(inti=0;i<n;i++){
// trao đổi arr[0] cùng arr[i]
inttemp=arr[0];
arr[0]=arr[i];
arr[i]=temp;

// trùng kiến đôi, bài trừ đã bài tự cuối cùng một cái nguyên tố
heapify(arr,i,0);
}
}

// hàm số: Đóng dấu số tổ
voidprintArray(intarr[],intn){
for(inti=0;i<n;++i)
printf("%d",arr[i]);
printf("\n");
}

// chủ hàm số: Thí nghiệm trở lên công năng
intmain(){
intarr[]={12,11,13,5,6,7};
intn=sizeof(arr)/sizeof(arr[0]);

printf("Nguyên thủy số tổ:\n");
printArray(arr,n);

selectionHeapSort(arr,n);

printf("Lựa chọn cùng đôi bài tự kết hợp sau bài tự số tổ:\n");
printArray(arr,n);
return0;
}
}

Thí dụ mẫu thuyết minh

Ở mặt trên số hiệu trung:

  • heapify()Hàm số dùng cho giữ gìn đôi tính chất.
  • heapSort()Hàm số dùng cho đối số tổ tiến hành đôi bài tự.
  • selectionHeapSort()Hàm số kết hợp lựa chọn bài tự cùng đôi bài tự ý nghĩ, thông qua thành lập nhỏ nhất đôi cùng mỗi lần lựa chọn thao tác tới thực hiện bài tự.
  • main()Hàm số trung triển lãm như thế nào sử dụngselectionHeapSort()Hàm số đối số tổ tiến hành bài tự, cũng phát ra bài tự sau kết quả.

Loại này kết hợp lựa chọn bài tự cùng đôi bài tự phương pháp lợi dụng đôi ưu thế, khiến cho lựa chọn quá trình càng cao hiệu, do đó tăng lên chỉnh thể bài tự thuật toán tính năng.

  • 7
    Điểm tán
  • Dẫm
  • 6
    Cất chứa
    Cảm thấy cũng không tệ lắm? Một kiện cất chứa
  • 打赏
    Đánh thưởng
  • 0
    Bình luận
Bình luận
Tăng thêm bao lì xì

Thỉnh điền bao lì xì chúc phúc ngữ hoặc tiêu đề

Cái

Bao lì xì cái số nhỏ nhất vì 10 cái

Nguyên

Bao lì xì kim ngạch thấp nhất 5 nguyên

Trước mặt ngạch trống3.43Nguyên Đi trước nạp phí >
Cần chi trả:10.00Nguyên
Thành tựu một trăm triệu kỹ thuật người!
Lĩnh sau ngươi sẽ tự động trở thành bác chủ cùng bao lì xì chủ fans Quy tắc
hope_wisdom
Phát ra bao lì xì

Đánh thưởng tác giả

ヾ từ thành

Ngươi cổ vũ sẽ là ta sáng tác lớn nhất động lực

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
Quét mã chi trả:¥1
Thu hoạch trung
Quét mã chi trả

Ngài ngạch trống không đủ, thỉnh đổi mới quét mã chi trả hoặcNạp phí

Đánh thưởng tác giả

Thật phóNguyên
Sử dụng ngạch trống chi trả
Điểm đánh một lần nữa thu hoạch
Quét mã chi trả
Tiền bao ngạch trống 0

Để khấu thuyết minh:

1. Ngạch trống là tiền bao nạp phí giả thuyết tiền, dựa theo 1:1 tỉ lệ tiến hành chi trả kim ngạch để khấu.
2. Ngạch trống vô pháp trực tiếp mua sắm download, có thể mua sắm VIP, trả phí chuyên mục cập chương trình học.

Ngạch trống nạp phí