字符串数组排序有哪些常用算法?

一、冒泡排序

冒泡排序是一种基础的、简单的排序算法,它的排序过程中比较相邻的两个元素,如果它们的顺序错误就进行交换,直到整个数组变为升序排序为止。冒泡排序的时间复杂度为O(n^2)。

void bubble_sort(char* str[], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j  0) {
               char* temp = str[j];
               str[j] = str[j + 1];
               str[j + 1] = temp;
           }
        }
    }
}

二、插入排序

插入排序是一种简单直观的排序算法,它的思路是将一个元素插入到已经排好序的数组中,直到全部插入完毕。插入排序的时间复杂度为O(n^2)。

void insertion_sort(char* str[], int n) {
    for (int i = 1; i  0 && strcmp(str[j], str[j - 1]) < 0; j--) {
            char* temp = str[j];
            str[j] = str[j - 1];
            str[j - 1] = temp;
        }
    }
}

三、选择排序

选择排序是一种简单直观的排序算法,它的思路是每次从未排序的元素中选择最小的元素,依次放置在已排好序的数组中的最后一个位置。选择排序的时间复杂度为O(n^2)。

void selection_sort(char* str[], int n) {
    for (int i = 0; i < n; i++) {
        int min_index = i;
        for (int j = i + 1; j < n; j++) {
            if (strcmp(str[j], str[min_index]) < 0) {
                min_index = j;
            }
        }
        char* temp = str[i];
        str[i] = str[min_index];
        str[min_index] = temp;
    }
}

四、快速排序

快速排序是一种高效率、通用的排序算法,它的思路是以一个基准元素为分界点将数组分为两个子序列,比基准元素小的元素放在基准元素左边,比基准元素大的元素放在右边,然后通过递归排序子序列,最终达到整个序列有序的目的。快速排序的时间复杂度为O(nlogn)。

void quick_sort(char* str[], int left, int right) {
    if (left >= right) return;
    char* pivot = str[left];
    int i = left, j = right;
    while (i < j) {
        while (i = 0) j--;
        str[i] = str[j];
        while (i < j && strcmp(str[i], pivot) <= 0) i++;
        str[j] = str[i];
    }
    str[i] = pivot;
    quick_sort(str, left, i - 1);
    quick_sort(str, i + 1, right);
}

五、归并排序

归并排序是一种基于分治思想的排序算法,它的思路是先将序列分成若干个子序列,分别对每个子序列进行排序,再将排好序的子序列合并成一个有序序列,最终达到整个序列有序的目的。归并排序的时间复杂度为O(nlogn)。

void merge(char* str[], int left, int mid, int right, char* temp[]) {
    int i = left, j = mid + 1, k = 0;
    while (i <= mid && j <= right) {
        if (strcmp(str[i], str[j]) <= 0) {
            temp[k++] = str[i++];
        } else {
            temp[k++] = str[j++];
        }
    }
    while (i <= mid) {
        temp[k++] = str[i++];
    }
    while (j <= right) {
        temp[k++] = str[j++];
    }
    for (int n = 0; n = right) return;
    int mid = (left + right) / 2;
    merge_sort(str, left, mid, temp);
    merge_sort(str, mid + 1, right, temp);
    merge(str, left, mid, right, temp);
}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/280447.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-21 13:03
下一篇 2024-12-21 13:03

相关推荐

  • Python字符串宽度不限制怎么打代码

    本文将为大家详细介绍Python字符串宽度不限制时如何打代码的几个方面。 一、保持代码风格的统一 在Python字符串宽度不限制的情况下,我们可以写出很长很长的一行代码。但是,为了…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python中将字符串转化为浮点数

    本文将介绍在Python中将字符串转化为浮点数的常用方法。在介绍方法之前,我们先来思考一下这个问题应该如何解决。 一、eval函数 在Python中,最简单、最常用的将字符串转化为…

    编程 2025-04-29
  • Python实现爬楼梯算法

    本文介绍使用Python实现爬楼梯算法,该算法用于计算一个人爬n级楼梯有多少种不同的方法。 有一楼梯,小明可以一次走一步、两步或三步。请问小明爬上第 n 级楼梯有多少种不同的爬楼梯…

    编程 2025-04-29
  • Python导入数组

    本文将为您详细阐述Python导入数组的方法、优势、适用场景等方面,并附上代码示例。 一、numpy库的使用 numpy是Python中一个强大的数学库,其中提供了非常丰富的数学函…

    编程 2025-04-29
  • Python 常用数据库有哪些?

    在Python编程中,数据库是不可或缺的一部分。随着互联网应用的不断扩大,处理海量数据已成为一种趋势。Python有许多成熟的数据库管理系统,接下来我们将从多个方面介绍Python…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • Python返回数组:一次性搞定多种数据类型

    Python是一种多用途的高级编程语言,具有高效性和易读性的特点,因此被广泛应用于数据科学、机器学习、Web开发、游戏开发等各个领域。其中,Python返回数组也是一项非常强大的功…

    编程 2025-04-29
  • Python学习笔记:去除字符串最后一个字符的方法

    本文将从多个方面详细阐述如何通过Python去除字符串最后一个字符,包括使用切片、pop()、删除、替换等方法来实现。 一、字符串切片 在Python中,可以通过字符串切片的方式来…

    编程 2025-04-29

发表回复

登录后才能评论