📅  最后修改于: 2023-12-03 15:30:15.640000             🧑  作者: Mango
在C程序中,我们经常需要对名称或字符串数组进行排序,快速高效地将数据排列有序,这样更容易读取、查找和操作数据。
下面介绍两种常用的方法:冒泡排序和快速排序。
冒泡排序是一种简单的排序算法,基本思路是两两比较相邻元素,如果前一个元素大于后一个元素,则交换这两个元素。一趟排序后最大元素就会被交换到序列的末尾,下一趟排序将除最大元素外的其余元素继续按此方法交换,直到整个序列有序为止。
以下是使用C语言实现的冒泡排序代码:
void bubbleSort(char *arr[], int n){
int i, j;
char *temp;
for (i = 0; i < n-1; i++){
for (j = 0; j < n-i-1; j++){
if (strcmp(arr[j], arr[j+1]) > 0){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
其中,char *arr[]
为字符串数组,n
为数组的长度。strcmp()
函数用于比较两个字符串的大小,当返回值小于0时,说明第一个字符串小于第二个字符串,反之则说明第一个字符串大于第二个字符串。
快速排序是一种常用的排序算法,使用了一种分治的思想,它的基本思路是选择一个特定的元素作为基准值,将小于基准值的元素放在基准值的左边,大于基准值的元素放在基准值的右边。然后对左右两边的子序列分别进行快速排序,直到整个序列有序为止。
以下是使用C语言实现的快速排序代码:
void quickSort(char *arr[], int left, int right){
int i, j;
char *pivot, *temp;
if (left < right){
i = left;
j = right + 1;
pivot = arr[left];
do{
do i++; while (strcmp(arr[i], pivot) < 0);
do j--; while (strcmp(arr[j], pivot) > 0);
if (i < j){
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
} while (i < j);
temp = arr[left];
arr[left] = arr[j];
arr[j] = temp;
quickSort(arr, left, j - 1);
quickSort(arr, j + 1, right);
}
}
其中,left
为数组的起始下标,right
为数组的末尾下标。strcmp()
函数用于比较两个字符串的大小,当返回值小于0时,说明第一个字符串小于第二个字符串,反之则说明第一个字符串大于第二个字符串。
跟据需要可以选用以上两种方法实现字符串排序算法,应具体情况而定。这些基本排序算法形式简单,可扩展性强,可通过不断优化算法改进其效率和稳定性。