数据结构与算法(十一) 排序算法一

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

int nArray[] = { 8,5,3,2,7 };如下一个数组,现对其进行从小到大排序

选择排序

选择排序:将小的依次放在前面
具象化如下:

数据结构与算法(十一) 排序算法一,排序算法,算法,数据结构
void swap(int *nSValue,int *nDValue) 交换函数 
{
    int nTempValue = 0;
    nTempValue = *nSValue;
    *nSValue = *nDValue;
    *nDValue = nTempValue;
}
void selectSort(int *pArr, int nCount) 选择排序 将大的放在后面
{
    for (size_t i = 0; i < nCount - 1; i++) 遍历4次即可
    {
        int nMix = pArr[i]; 设置最小值临时变量 
        for (size_t j = i; j <  j++)  当i=0时,会打印不变,课后思考
        {
            if (pArr[j] < nMix)
            {
                swap(&pArr[j], &nMix);
            }
        }
        if (nMix != pArr[i])
        {
            swap(&pArr[i], &nMix);
        }
    }
}

冒泡排序

冒泡排序 默认第一个元素已排序,其他未排序,将已排序元素从前之后依次比对插入合适位置
具象化如下:

数据结构与算法(十一) 排序算法一,排序算法,算法,数据结构
void bubbleSort(int *pArr, int nCount)
{
    for (size_t i = 0; i < nCount -1; i++)
    {
        for (size_t j = 0; j < nCount - 1 - i; j++) 
        {
            if (pArr[j] > pArr[j + 1])
            {
                swap(&pArr[j], &pArr[j + 1]);
            }
        }
    }
}

插入排序


插入排序:默认第一个元素已排序,其他未排序,将已排序元素从前之后依次比对插入合适位置
具象化如下:

数据结构与算法(十一) 排序算法一,排序算法,算法,数据结构
void InsertioSort(int *pArr, int nCount) 
{
    for (size_t i = 1; i < nCount; i++)
    {
        int nValue = pArr[i];
        int nIndex = i - 1;
        while (nIndex >=0&&pArr[nIndex] > nValue)
        {
            pArr[nIndex + 1] = pArr[nIndex];
            nIndex--;
        }
        pArr[nIndex + 1] = nValue;
    }
}

希尔排序


void ShellSort(int *pArr, int nCount) 
{
    int nInterval = 1;
    while (nInterval < nCount)
    {
        nInterval = 3 * nInterval + 1;
    }
    while (nInterval > 0)  如下同插入排序
    {
        for (size_t i = nInterval; i < nCount; i++)
        {
            int nValue = pArr[i];
            int nIndex = i - nInterval;
            while (nIndex >= 0 && pArr[nIndex] > nValue)
            {
                pArr[nIndex + nInterval] = pArr[nIndex];
                nIndex = nIndex - nInterval;
            }
            pArr[nIndex + nInterval] = nValue;
        }
        nInterval = nInterval / 3;
    }
}

void print(int *pArr,int nCount) 打印数组
{
    for (size_t i = 0; i < nCount; i++)
    {
        std::cout << pArr[i] << "\t";
    }
    std::cout << std::endl;
}文章来源地址https://www.toymoban.com/news/detail-809598.html

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

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

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

相关文章

  • 数据结构和算法笔记4:排序算法-归并排序

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

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

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

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

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

    2024年02月13日
    浏览(80)
  • 【数据结构与算法】十大经典排序算法-冒泡排序

    🌟 个人博客: www.hellocode.top 🏰 Java知识导航: Java-Navigate 🔥 CSDN: HelloCode. 🌴 掘金 :HelloCode 🌞 知乎 :HelloCode ⚡如有问题,欢迎指正,一起学习~~ 冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复地交换相邻元素的位置来将最大(或最小)的元素逐步“冒泡”到

    2024年02月14日
    浏览(69)
  • 【数据结构与算法】十大经典排序算法-快速排序

    🌟 个人博客: www.hellocode.top 🏰 Java知识导航: Java-Navigate 🔥 CSDN: HelloCode. 🌞 知乎 :HelloCode 🌴 掘金 :HelloCode ⚡如有问题,欢迎指正,一起学习~~ 快速排序(Quick Sort)是一种高效的排序算法,是对冒泡排序的优化。它采用分治法(Divide and Conquer)的思想,将待排序序列

    2024年02月13日
    浏览(62)
  • 数据结构——排序算法之快速排序

        个人主页: 日刷百题 系列专栏 : 〖C/C++小游戏〗 〖Linux〗 〖数据结构〗   〖C语言〗 🌎 欢迎各位 → 点赞 👍+ 收藏 ⭐️+ 留言 📝  ​ ​ 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法。 基本思想: 任取待排序元素序列中 的某元素作为基准值,按照

    2024年01月21日
    浏览(54)
  • 【数据结构与算法】排序算法(选择排序,冒泡排序,插入排序,希尔排序)

    基本概念这了就不浪费时间解释了,这四种都是很简单的排序方式,本专栏后续文章会出归并排序,计数排序,快速排序,堆排序,桶排序等排序算法,今天这篇文章中给出选择排序,冒泡排序,插入排序和希尔排序的实现; 如果发现文章中有错误,还请大家指出来,我会非

    2024年02月15日
    浏览(81)
  • 数据结构与算法-排序算法

    递归将整个函数的调用过程 调用过程 如何在CSDN博客中插入公式和各种符号 类似二叉树的后续遍历 递归行为和递归行为时间复杂度的估算 master 公式 : T ( n ) = a × T ( n b ) + O ( n d ) T(n) = a times T (frac{n}{b}) + O(n^d) T ( n ) = a × T ( b n ​ ) + O ( n d ) T ( n ) T(n) T ( n ) : 母问题的规模

    2024年02月15日
    浏览(51)
  • 算法 数据结构 递归插入排序 java插入排序 递归求解插入排序算法 如何用递归写插入排序 插入排序动图 插入排序优化 数据结构(十)

    1. 插入排序(insertion-sort):                                           是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入     算法稳定性:                  

    2024年02月09日
    浏览(52)
  • 数据结构算法练习 插入排序 冒泡排序

    插入排序 代码如下  package main import \\\"fmt\\\" func main() {     a := []int{4, 5, 6, 1, 3, 2}         b := insert(a)     for i := 0; i len(b); i++ {         fmt.Println(b[i])     } } func insert(a []int) []int {     if len(a) = 1 {                   如果数组长度小于等于1 不用排序直接返回          retur

    2024年02月08日
    浏览(55)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包