数据结构--》掌握数据结构中的排序算法

这篇具有很好参考价值的文章主要介绍了数据结构--》掌握数据结构中的排序算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        当我们面对海量数据时,如何高效地将其排序是数据结构领域中一个重要的问题。排序算法作为其中的关键部分,扮演着至关重要的角色。

        无论你是初学者还是进阶者,本文将为你提供简单易懂、实用可行的知识点,帮助你更好地掌握排序算法在数据结构和算法中的重要性,进而提升算法解题的能力。接下来让我们开启数据结构与算法的奇妙之旅吧。

        当我们需要对一组数据进行排序时,就需要使用排序算法。通常情况下,我们会将一组数据按照一定的规则进行排列,从而使其更易于查找和处理。

        常见的排序算法包括冒泡排序插入排序选择排序希尔排序归并排序快速排序等等。这些算法都有各自的优缺点,不同的应用场景适用不同的算法。因此,在实际开发中需要根据具体情况进行选择。接下来根据考研的大纲要求,着重对相关排序算法进行相应的讲解:

目录

插入排序

交换排序

选择排序

归并排序

基数排序


插入排序

算法思想:每次将一个待排序的记录按其关键字大小插入到前面已排好序的子序列中,直到全部记录插入完成。其实现的过程大致如下:

1)从第一个元素开始,认为它是已排序的区间。

2)取出下一个元素,在已经排好序的元素序列中从后向前扫描。

3)如果该元素(已排序)大于新元素,将该元素移到下一个位置。

4)重复步骤 3 直到找到已经排序的元素小于或者等于新元素的位置。

5)将新元素插入到该位置中。

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

用c语言实现插入排序算法:

void insertionSort(int arr[], int n) {
    int i, key, j;
    for (i = 1; i < n; i++) {
        key = arr[i];
        j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j = j - 1;
        }
        arr[j + 1] = key;
    }
}

回顾重点,其主要内容整理成如下内容:

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

希尔排序:是一种基于插入排序的排序算法,也被称为缩小增量排序。它通过将待排序的元素分组,然后依次对每组的元素进行插入排序,最后再对整个序列进行一次插入排序。如下:

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

对生成的子表进行直接插入排序得到的结果如下:

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

直到d等于1的时候,得到的排序结果基本有序,然后进行直接插入排序得到最后的结果。

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

最终呈现的过程结果如下:

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

用c语言实现希尔排序算法: 

#include <stdio.h>

void shellSort(int arr[], int n) {
    // 定义增量序列
    int gap, i, j, temp;
    for (gap = n / 2; gap > 0; gap /= 2) {
        // 内部使用插入排序对每个子序列进行排序
        for (i = gap; i < n; i++) {
            temp = arr[i];
            j = i;
            while (j >= gap && arr[j - gap] > temp) {
                arr[j] = arr[j - gap];
                j -= gap;
            }
            arr[j] = temp;
        }
    }
}

int main() {
    int arr[] = {9, 5, 2, 7, 1, 8};
    int n = sizeof(arr) / sizeof(arr[0]);
    
    printf("原始数组:");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    
    shellSort(arr, n);
    
    printf("\n排序后数组:");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    
    return 0;
}

回顾重点,其主要内容整理成如下内容:

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

交换排序

交换排序是一种比较简单直观的排序算法,其主要思想是通过交换数组中相邻且不符合顺序要求的元素,将最大或最小的元素逐步“冒泡”到正确的位置。常用的交换排序算法有冒泡排序快速排序,下面将着重讲解一下这两种排序的相关实现:

冒泡排序:最基础的交换排序算法,其核心思想是从左到右,依次比较相邻的元素,将较大的元素交换到后面。该算法重复多次,每次将一个未排序的元素放到正确的位置,直到整个数组有序。冒泡排序的时间复杂度为 O(n^2)。

前后数值进行对比,小的前大的后,然后重复多次,直到将顺序从小到大弄出来

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

用c语言实现冒泡排序算法:  

#include <stdio.h>

void bubbleSort(int arr[], int n) {
    int i, j, 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;
            }
        }
    }
}

int main() {
    int arr[] = {9, 5, 2, 7, 1, 8};
    int n = sizeof(arr) / sizeof(arr[0]);
    
    printf("原始数组:");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    
    bubbleSort(arr, n);
    
    printf("\n排序后数组:");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    
    return 0;
}

回顾重点,其主要内容整理成如下内容:

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

快速排序:是一种分治思想的排序算法,它将问题分割成较小的子问题,然后递归地求解这些子问题。在快速排序中,通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后再按此方法对两部分记录进行排序,递归地进行下去,直到整个序列有序。快速排序的平均时间复杂度为 O(n log n),最坏情况下时间复杂度为 O(n^2)。

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

用c语言实现快速排序算法:   

#include <stdio.h>

// 交换数组中两个元素的值
void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

// 将基准元素放在正确的位置,并返回该位置的索引
int partition(int arr[], int low, int high) {
    int pivot = arr[high];  // 将最后一个元素设为基准元素
    int i = (low - 1);  // i 初始化为最低索引的前一个

    for (int j = low; j <= high - 1; j++) {
        if (arr[j] < pivot) {
            i++;  // 找到一个比基准元素小的元素,将 i 向后移动
            swap(&arr[i], &arr[j]);  // 交换 arr[i] 和 arr[j]
        }
    }
    swap(&arr[i + 1], &arr[high]);  // 将基准元素放置在正确的位置

    return (i + 1);
}

// 快速排序函数
void quickSort(int arr[], int low, int high) {
    if (low < high) {
        // 将基准元素放置在正确的位置
        int pi = partition(arr, low, high);

        // 递归调用快速排序函数
        quickSort(arr, low, pi - 1);  // 对基准元素左侧的子数组进行排序
        quickSort(arr, pi + 1, high);  // 对基准元素右侧的子数组进行排序
    }
}

// 打印数组元素
void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int arr[] = {9, 5, 2, 7, 1, 8};
    int n = sizeof(arr) / sizeof(arr[0]);

    printf("原始数组:");
    printArray(arr, n);

    quickSort(arr, 0, n - 1);

    printf("排序后数组:");
    printArray(arr, n);

    return 0;
}

回顾重点,其主要内容整理成如下内容: 

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

选择排序

选择排序是一种简单直观的排序算法,它的基本思路是每次从未排序的部分中选择最小(或最大)的元素,然后将其放置在已排序部分的末尾。重复这个过程直到所有元素都排好序。常用的交换排序算法有简单选择排序堆排序,下面将着重讲解一下这两种排序的相关实现:

简单选择排序:基本思路是每次从未排序的部分中选择最小(或最大)的元素,然后将其与未排序部分的第一个元素交换位置,即将最小元素放置在已排序部分的末尾。重复这个过程直到所有元素都排好序。

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

该算法的性能分析如下:

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

回顾重点,其主要内容整理成如下内容:

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

堆排序

堆排序是一种基于堆数据结构的排序算法,它利用了堆的特性来进行排序。堆是一种完全二叉树,分为最大堆和最小堆两种类型。

关于堆排序的讲解可以参考我之前的文章:解锁数据结构中树与二叉树的奥秘(二) 中的堆排序讲解,总结知识如下:

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

归并排序

归并排序是一种常用的排序算法,它基于分治的思想。归并排序将待排序的数组不断分割为较小的子数组,然后逐步将这些子数组合并成为有序的大数组,最终得到完全有序的数组。如下:

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

手算模拟归并排序的过程如下:

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

回顾重点,其主要内容整理成如下内容: 

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

基数排序

基数排序是一种非比较型整数排序算法,它是通过将待排序的整数按照位数划分成不同的数字组,然后对每个数字组进行排序,最终得到有序的整数数组。

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

得到的结果再以十位进行分配:

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

最终呈现的结果如下:

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法

回顾重点,其主要内容整理成如下内容: 

数据结构--》掌握数据结构中的排序算法,算法设计与分析,数据结构,算法,经验分享,排序算法文章来源地址https://www.toymoban.com/news/detail-715369.html

到了这里,关于数据结构--》掌握数据结构中的排序算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构——9大基础排序】一文掌握九大经典排序(配有详细图文说明!!!)

    算法基本思想:(从大到小排序) 在一个 非递减 的有序数组中,要新增一个元素 x ,有两个方法: 1.从数组的头部开始向后遍历,寻找 第一个比x 大 的元素 y ,从y元素开始的所有元素全部向后移动,最后将x元素插入数组。(×) 2.从数组的尾部开始向后向前遍历,寻找 第

    2024年02月08日
    浏览(31)
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之010 week02 01-01 最简单的排序算法-选择排序法的设计思想

    接下类,我们学习另外一类非常基础的算法,即排序算法。 排序算法是计算机科学领域研究的非常深入的一类算法,排序这个动作本身也是非常重要的, 很多时候面对无需的数据,首先需要做的就是对他们进行排序。 排序算法——目的:让数据有序。 排序算法——种类:种

    2023年04月21日
    浏览(44)
  • 有哪些数据结构与算法是程序员必须要掌握的?——“数据结构与算法”

    作为IT程序员,学习算法的原因主要有以下几点: 提升问题解决能力:算法可以帮助程序员分析、优化和解决复杂问题。了解算法原理和实现方式将有助于程序员更快地找到合适的解决方案。这对于解决实际工作中的问题是非常有帮助的。 提高代码效率:通过学习不同的算法

    2024年02月13日
    浏览(23)
  • 数据结构--》从线性表说起,掌握常用基础算法

    目录 初识线性表 线性表的基本操作 顺序表的定义 顺序表的基本操作 单链表的定义 单链表的基本操作  双链表的介绍 循环链表的介绍 静态链表的介绍 线性表是具有 相同 数据类型的 n (n0) 个数据元素的 有限序列 ,其中n为 表长 ,当n=0时线性表是一个 空表 。若用L命名线性

    2024年02月09日
    浏览(34)
  • 【排序算法】数据结构排序详解

    前言: 今天我们将讲解我们数据结构初阶的最后一部分知识的学习,也是最为“炸裂”的知识---------排序算法的讲解!!!! 排序 :所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 稳定性 :假定在待排序的记录序列中,

    2023年04月08日
    浏览(33)
  • 数据结构——排序算法——归并排序

    在第二个列表向第一个列表逐个插入的过程中,由于第二个列表已经有序,所以后续插入的元素一定不会在前面插入的元素之前。在逐个插入的过程中,每次插入时,只需要从上次插入的位置开始,继续向后寻找插入位置即可。这样一来,我们最多只需要将两个有序数组遍历

    2024年02月09日
    浏览(25)
  • 【数据结构与算法】掌握顺序栈:从入门到实践

       🌱博客主页:青竹雾色间. 🌱系列专栏:数据结构与算法 😘博客制作不易欢迎各位👍点赞+⭐收藏+➕关注 目录 前言 顺序栈的实现 初始化栈 判断栈空 判断栈满 入(进)栈 出栈 获取栈顶元素 示例代码 顺序栈的应用前景 当你学习数据结构和算法时,顺序栈(Sequential

    2024年02月08日
    浏览(51)
  • 【数据结构与算法】十大经典排序算法-希尔排序

    🌟 个人博客: www.hellocode.top 🏰 Java知识导航: Java-Navigate 🔥 CSDN: HelloCode. 🌞 知乎 :HelloCode 🌴 掘金 :HelloCode ⚡如有问题,欢迎指正,一起学习~~ 希尔排序是一种插入排序的改进版本,旨在解决插入排序在处理大规模数据时的效率问题。通过将数组分为多个子序列并对

    2024年02月12日
    浏览(49)
  • 【数据结构与算法】十大经典排序算法-插入排序

    🌟 个人博客: www.hellocode.top 🏰 Java知识导航: Java-Navigate 🔥 CSDN: HelloCode. 🌞 知乎 :HelloCode 🌴 掘金 :HelloCode ⚡如有问题,欢迎指正,一起学习~~ 插入排序(Insertion Sort)是一种简单直观的排序算法,其基本思想是将一个记录插入到已排好序的有序序列中,直到所有记录

    2024年02月13日
    浏览(53)
  • 数据结构和算法笔记4:排序算法-归并排序

    归并排序算法完全遵循分治模式。直观上其操作如下: 分解:分解待排序的n个元素的序列成各具n/2个元素的两个子序列。 解决:使用归并排序递归地排序两个子序列。 合并:合并两个已排序的子序列以产生已排序的答案。 我们直接来看例子理解算法的过程,下面是要排序

    2024年01月21日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包