一、冒泡排序
冒泡排序是一種基礎的、簡單的排序演算法,它的排序過程中比較相鄰的兩個元素,如果它們的順序錯誤就進行交換,直到整個數組變為升序排序為止。冒泡排序的時間複雜度為O(n^2)。
void bubble_sort(char* str[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j 0) {
char* temp = str[j];
str[j] = str[j + 1];
str[j + 1] = temp;
}
}
}
}
二、插入排序
插入排序是一種簡單直觀的排序演算法,它的思路是將一個元素插入到已經排好序的數組中,直到全部插入完畢。插入排序的時間複雜度為O(n^2)。
void insertion_sort(char* str[], int n) {
for (int i = 1; i 0 && strcmp(str[j], str[j - 1]) < 0; j--) {
char* temp = str[j];
str[j] = str[j - 1];
str[j - 1] = temp;
}
}
}
三、選擇排序
選擇排序是一種簡單直觀的排序演算法,它的思路是每次從未排序的元素中選擇最小的元素,依次放置在已排好序的數組中的最後一個位置。選擇排序的時間複雜度為O(n^2)。
void selection_sort(char* str[], int n) {
for (int i = 0; i < n; i++) {
int min_index = i;
for (int j = i + 1; j < n; j++) {
if (strcmp(str[j], str[min_index]) < 0) {
min_index = j;
}
}
char* temp = str[i];
str[i] = str[min_index];
str[min_index] = temp;
}
}
四、快速排序
快速排序是一種高效率、通用的排序演算法,它的思路是以一個基準元素為分界點將數組分為兩個子序列,比基準元素小的元素放在基準元素左邊,比基準元素大的元素放在右邊,然後通過遞歸排序子序列,最終達到整個序列有序的目的。快速排序的時間複雜度為O(nlogn)。
void quick_sort(char* str[], int left, int right) {
if (left >= right) return;
char* pivot = str[left];
int i = left, j = right;
while (i < j) {
while (i = 0) j--;
str[i] = str[j];
while (i < j && strcmp(str[i], pivot) <= 0) i++;
str[j] = str[i];
}
str[i] = pivot;
quick_sort(str, left, i - 1);
quick_sort(str, i + 1, right);
}
五、歸併排序
歸併排序是一種基於分治思想的排序演算法,它的思路是先將序列分成若干個子序列,分別對每個子序列進行排序,再將排好序的子序列合併成一個有序序列,最終達到整個序列有序的目的。歸併排序的時間複雜度為O(nlogn)。
void merge(char* str[], int left, int mid, int right, char* temp[]) {
int i = left, j = mid + 1, k = 0;
while (i <= mid && j <= right) {
if (strcmp(str[i], str[j]) <= 0) {
temp[k++] = str[i++];
} else {
temp[k++] = str[j++];
}
}
while (i <= mid) {
temp[k++] = str[i++];
}
while (j <= right) {
temp[k++] = str[j++];
}
for (int n = 0; n = right) return;
int mid = (left + right) / 2;
merge_sort(str, left, mid, temp);
merge_sort(str, mid + 1, right, temp);
merge(str, left, mid, right, temp);
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/280447.html
微信掃一掃
支付寶掃一掃