一、冒泡排序
冒泡排序是一种基础的、简单的排序算法,它的排序过程中比较相邻的两个元素,如果它们的顺序错误就进行交换,直到整个数组变为升序排序为止。冒泡排序的时间复杂度为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/n/280447.html
微信扫一扫
支付宝扫一扫