目录
字符串排序在许多应用场景中至关重要,如字典实现、自动补全、以及文本处理等。以下是几种常见的字符串排序算法。
比较排序算法在字符串排序中的应用
快速排序(Quick Sort)
原理
快速排序通过分治法将字符串数组分为较小的子数组,并递归地对每个子数组进行排序。首先选择一个基准字符串(pivot),然后将小于基准的字符串移到其左边,大于基准的字符串移到其右边,最后对左右子数组进行相同的操作,直到整个数组有序。
代码示例
python语言
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
# 示例使用
strings = ["banana", "apple", "grape", "cherry", "blueberry"]
sorted_strings = quick_sort(strings)
print(sorted_strings) # 输出: ['apple', 'banana', 'blueberry', 'cherry', 'grape']
C语言
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 交换两个字符串的函数
void swap(char **a, char **b) {
char *temp = *a;
*a = *b;
*b = temp;
}
// 划分函数,选择枢轴并将数组划分为小于、等于和大于枢轴的部分
int partition(char **arr, int low, int high) {
char *pivot = arr[high];
int i = (low - 1);
for (int j = low; j <= high - 1; j++) {
if (strcmp(arr[j], pivot) <= 0) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return (i + 1);
}
// 快速排序函数
void quickSort(char **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 quickSortDriver(char **arr, int size) {
quickSort(arr, 0, size - 1);
}
// 打印字符串数组的函数
void printArray(char **arr, int size) {
for (int i = 0; i < size; i++)
printf("%s ", arr[i]);
printf("\n");
}
// 测试示例
int main() {
char *strings[] = {"banana", "apple", "grape", "cherry", "blueberry"};
int size = sizeof(strings) / sizeof(strings[0]);
printf("原始数组为: ");
printArray(strings, size);
quickSortDriver(strings, size);
printf("排序后的数组为: ");
printArray(strings, size);
return 0;
}
归并排序(Merge Sort)
原理
归并排序将字符串数组递归地分成两部分,分别进行排序,然后合并两个有序的子数组。归并排序的核心是“分而治之”,它不断地将问题分解,直到问题足够简单,再合并解决。
代码示例
python语言
def merge_sort(arr):
if len(arr) <= 1:
return arr
m