📌  相关文章
📜  C程序对名称或字符串数组进行排序(1)

📅  最后修改于: 2023-12-03 15:30:15.640000             🧑  作者: Mango

C程序对名称或字符串数组进行排序

在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时,说明第一个字符串小于第二个字符串,反之则说明第一个字符串大于第二个字符串。

总结

跟据需要可以选用以上两种方法实现字符串排序算法,应具体情况而定。这些基本排序算法形式简单,可扩展性强,可通过不断优化算法改进其效率和稳定性。