C语言实现字符串排序

在计算机编程中,字符串排序是一种常见的操作,在C语言中,我们可以使用多种方法对字符串进行排序,例如冒泡排序、选择排序、插入排序等,本文将介绍如何使用C语言实现字符串排序。

1、冒泡排序

字符串排序c语言 字符串排序C语言指针

冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

以下是使用冒泡排序对字符串数组进行排序的C语言代码:

#include <stdio.h>
#include <string.h>
void bubble_sort(char *arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1 - i; j++) {
            if (strcmp(arr[j], arr[j + 1]) > 0) {
                char *temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}
int main() {
    char *arr[] = {"apple", "banana", "orange", "grape", "pear"};
    int n = sizeof(arr) / sizeof(arr[0]);
    bubble_sort(arr, n);
    for (int i = 0; i < n; i++) {
        printf("%s
", arr[i]);
    }
    return 0;
}

2、选择排序

选择排序是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

以下是使用选择排序对字符串数组进行排序的C语言代码:

#include <stdio.h>
#include <string.h>
void selection_sort(char *arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        int min_index = i;
        for (int j = i + 1; j < n; j++) {
            if (strcmp(arr[j], arr[min_index]) < 0) {
                min_index = j;
            }
        }
        if (min_index != i) {
            char *temp = arr[i];
            arr[i] = arr[min_index];
            arr[min_index] = temp;
        }
    }
}
int main() {
    char *arr[] = {"apple", "banana", "orange", "grape", "pear"};
    int n = sizeof(arr) / sizeof(arr[0]);
    selection_sort(arr, n);
    for (int i = 0; i < n; i++) {
        printf("%s
", arr[i]);
    }
    return 0;
}

3、插入排序

插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入,插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

以下是使用插入排序对字符串数组进行排序的C语言代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void insertion_sort(char *arr[], int n) {
    for (int i = 1; i < n; i++) {
        char *key = arr[i];
        int j = i - 1;
        while (j >= 0 && strcmp(arr[j], key) > 0) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
}
int main() {
    char *arr[] = {"apple", "banana", "orange", "grape", "pear"};
    int n = sizeof(arr) / sizeof(arr[0]);
    insertion_sort(arr, n);
    for (int i = 0; i < n; i++) {
        printf("%s
", arr[i]);
    }
    return 0;
}