21xrx.com
2024-12-22 22:12:08 Sunday
登录
文章检索 我的文章 写文章
C++ 字符串排序
2023-07-10 03:45:11 深夜i     --     --
C++语言 字符串排序 数组 STL库 sort函数

在C++编程中,字符串排序是一项非常常见的任务。当我们需要对一组字符串进行排序时,我们可以使用多种算法来实现。本文将介绍一些常用的字符串排序算法,并提供示例代码以帮助您更好地掌握它们。

1. 冒泡排序

冒泡排序是一种基础的排序算法,其主要思想是通过比较相邻的元素并交换它们的位置,不断将最大的元素交换至序列的尾部。在字符串排序中,我们可以将每个字符串按字典序进行比较,以实现排序。

示例代码:


void bubbleSort(string arr[], int n) { 

  int i, j; 

  string temp; 

  for (i = 0; i < n-1; i++) {  

    for (j = 0; j < n-i-1; j++) { 

      if (arr[j] > arr[j+1]) { 

        temp = arr[j]; 

        arr[j] = arr[j+1]; 

        arr[j+1] = temp; 

      } 

    } 

  } 

2. 快速排序

快速排序是一种常用的高效排序算法,其主要思想是通过划分来实现对序列的排序。在字符串排序中,我们可以根据一个选定的基准元素,将序列中小于等于它的元素放置于它的左侧,而将大于它的元素放置于右侧。然后,递归地对左右两侧进行排序,最终得到排好序的序列。

示例代码:


int partition(string arr[], int low, int high) { 

  string pivot = arr[high]; 

  int i = (low - 1); 

 

  for (int j = low; j <= high - 1; j++) { 

    if (arr[j] <= pivot) { 

      i++;  

      swap(arr[i], arr[j]); 

    } 

  } 

  swap(arr[i + 1], arr[high]); 

  return (i + 1); 

void quickSort(string arr[], int low, int high) { 

  if (low < high) { 

    int pi = partition(arr, low, high); 

 

    quickSort(arr, low, pi - 1); 

    quickSort(arr, pi + 1, high); 

  } 

3. 归并排序

归并排序是一种分治思想的排序算法,其主要思路是将一个序列划分成两个长度相等(或接近)的子序列,然后递归地对两个子序列进行排序,最后将它们合并成一个有序序列。在字符串排序中,我们可以比较两个子序列中最小的字符串,然后将其合并成有序的子序列,从而得到排好序的字符串序列。

示例代码:


void merge(string arr[], int l, int m, int r) { 

  int i, j, k; 

  int n1 = m - l + 1; 

  int n2 = r - m; 

 

  string L[n1], R[n2]; 

 

  for (i = 0; i < n1; i++) 

    L[i] = arr[l + i]; 

  for (j = 0; j < n2; j++) 

    R[j] = arr[m + 1 + j]; 

 

  i = 0;

  j = 0;

  k = l;

  while (i < n1 && j < n2) { 

    if (L[i] <= R[j]) { 

      arr[k] = L[i]; 

      i++; 

    } 

    else { 

      arr[k] = R[j]; 

      j++; 

    } 

    k++; 

  } 

 

  while (i < n1) { 

    arr[k] = L[i]; 

    i++; 

    k++; 

  } 

 

  while (j < n2) { 

    arr[k] = R[j]; 

    j++; 

    k++; 

  } 

 

void mergeSort(string arr[], int l, int r) { 

  if (l < r) { 

    int m = l + (r - l) / 2; 

 

    mergeSort(arr, l, m); 

    mergeSort(arr, m + 1, r); 

 

    merge(arr, l, m, r); 

  } 

}

在C++编程中,字符串排序是一项基本的操作,熟练掌握这些常用的排序算法是非常重要的。通过本文提供的示例代码和算法思路,我们希望能够帮助读者更好地理解和应用这些排序算法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复