τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Το Quick Sort είναι ένας αποτελεσματικός αλγόριθμος ταξινόμησης που βασίζεται στη στρατηγική διαίρει και βασίλευε. Η βασική ιδέα αυτού του αλγορίθμου ταξινόμησης είναι να επιλέξετε ένα στοιχείο αναφοράς, να χωρίσετε τον πίνακα σε δύο μέρη, έτσι ώστε τα στοιχεία στα αριστερά να είναι λιγότερα ή ίσα με το στοιχείο αναφοράς και τα στοιχεία στα δεξιά είναι μεγαλύτερα από ή ίσο με το στοιχείο αναφοράς και, στη συνέχεια, εφαρμόστε αναδρομικά τη γρήγορη ταξινόμηση στα δύο μέρη.
Επιλέξτε βασικό στοιχείο : Επιλέξτε ένα στοιχείο από τον πίνακα ως άξονα. Συνήθως το πρώτο στοιχείο, το τελευταίο στοιχείο ή ένα τυχαίο στοιχείο επιλέγεται ως βάση.
Χώρισμα : Αναδιάταξη του πίνακα έτσι ώστε τα στοιχεία μικρότερα από το βασικό στοιχείο να βρίσκονται στην αριστερή πλευρά του βασικού στοιχείου και τα στοιχεία μεγαλύτερα από το στοιχείο βάσης να βρίσκονται στη δεξιά πλευρά. Ταυτόχρονα, το στοιχείο βάσης βρίσκεται στην τελική θέση ταξινόμησης.
αναδρομική ταξινόμηση: Ταξινομήστε γρήγορα τους υποπίνακες στην αριστερή και δεξιά πλευρά του στοιχείου αναφοράς αναδρομικά.
Ο παρακάτω είναι ο κώδικας για την εφαρμογή γρήγορης ταξινόμησης στη γλώσσα C:
#include <stdio.h>
// 函数:交换数组中两个元素的值
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 函数:将数组分区,并返回基准元素的位置(索引)
int partition(int arr[], int low, int high) {
int pivot = arr[high]; // 选择最后一个元素作为基准
int i = low - 1; // 初始化分区索引,比基准元素小的元素会放在左边
for (int j = low; j < high; j++) {
// 如果当前元素小于或等于基准元素,则将它交换到分区的左边
if (arr[j] <= pivot) {
i++; // 移动分区索引
swap(&arr[i], &arr[j]);
}
}
// 最后将基准元素交换到正确的位置
swap(&arr[i + 1], &arr[high]);
return i + 1; // 返回基准元素的位置
}
// 函数:实现快速排序
void quickSort(int arr[], int low, int high) {
if (low < high) {
// 对数组进行分区
int pi = partition(arr, low, high);
// 对基准元素左边和右边的子数组进行递归排序
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
// 函数:打印数组元素
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("n");
}
// 主函数:测试快速排序的实现
int main() {
int arr[] = {10, 7, 8, 9, 1, 5};
int n = sizeof(arr) / sizeof(arr[0]);
printf("原始数组: n");
printArray(arr, n);
quickSort(arr, 0, n - 1);
printf("排序后的数组: n");
printArray(arr, n);
return 0;
}
Η χρονική πολυπλοκότητα της γρήγορης ταξινόμησης εξαρτάται κυρίως από τη χρονική πολυπλοκότητα της λειτουργίας του διαμερίσματος και τον αριθμό των αναδρομικών κλήσεων. Η χρονική πολυπλοκότητα της γρήγορης ταξινόμησης είναι O(n^2) στη χειρότερη περίπτωση, αλλά O(n log n) στη μέση περίπτωση, καθιστώντας την έναν αποτελεσματικό αλγόριθμο ταξινόμησης.
Η γρήγορη ταξινόμηση επιτυγχάνει αποτελεσματική ταξινόμηση μέσω της στρατηγικής διαίρει και βασίλευε και των λειτουργιών κατάτμησης. Δεν απαιτεί επιπλέον χώρο αποθήκευσης (εκτός από το χώρο στοίβας για επαναλαμβανόμενες κλήσεις) και έχει καλή απόδοση υπό μέτριες συνθήκες. Επομένως, η γρήγορη ταξινόμηση είναι ένας από τους ευρέως χρησιμοποιούμενους αλγόριθμους ταξινόμησης σε πρακτικές εφαρμογές, ιδιαίτερα κατάλληλος για την ταξινόμηση εργασιών μεγάλων συνόλων δεδομένων.