一、冒泡排序
冒泡排序是一種基礎的、簡單的排序演算法,它的排序過程中比較相鄰的兩個元素,如果它們的順序錯誤就進行交換,直到整個數組變為升序排序為止。冒泡排序的時間複雜度為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