排序算法总结——C++实现(未完善)

一、排序算法的概述

排序算法种类: 

非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。

线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。

算法复杂度:

 

二、冒泡排序

1.步骤

  • 前提条件:假设数组长度为n,目标为升序。
  • 步骤:

    1)遍历数组中的元素,如果arry[Index + 1] < arry[nIndex],则交换arry[Index + 1]和arry[nIndex]中的内容。

    2)对数组进行n次遍历直至所有数据有序。

2.C++实现

void BubbleSort(in arry[], int nSize)
{
    for (int nIndex = 1; nIndex < nSize; ++nIndex)
    {
        for(int nTmpIndex = 0; nTmpIndex < nSize; ++nIndex)
        {
            if (arry[nTmpIndex] > arry[nIndex])
            {
                int nVal = arry[nTmpIndex];
                arry[nTmpIndex] = arry[nIndex];
                arry[nIndex] = nVal;
            }
        }
    }
}

三、选择排序

1.步骤

  • 前提条件:假设数组长度为n,目标为升序。
  • 步骤:

   1)遍历数组中所有元素,将最小的元素插入到无序队列的第一个元素前,形成有序队列。

   2)继续遍历其他无序队列,执行步骤1)

2.C++实现

void SelectionSort(int arry[], int nSize)
{
    for (int nIndex = 0; nIndex < nSize; ++nIndex)
    {
        int nMinValIndex = nIndex;
        
        for (int nTmpIndex = nIndex; nTmpIndex < nSize; ++nTmpIndex)
        {
            if (arry[nTmpIndex] < arry[nMinValIndex])
            {
                nMinValIndex = nTmpIndex;
            }
        }

        int nMinVal = arry[nMinValIndex];
        arry[nMinValIndex] = arry[nIndex];
        arry[nIndex] = nMinVal;
    }
}

四、插入排序

     遍历数组的元素,与前面已经进行过排序的数组进行比对并插入到合适的位置。类似于我们玩扑克牌一样,抓一张牌并按序插入到合适位置

1.步骤

  • 前提条件:假设数组长度为n,目标为升序。
  • 步骤:

    1)依次遍历数组中的元素,元素的索引为nIndex,向前查找

    2)如果存在位置N使得arry[N]小于该元素并且arry[N+1]大于该元素则将该元素插入到N+1的位置。原N+1至nIndex - 1的元素后移一个位置。

  2.C++实现

void InsertSort(int arry[], int nSize)
{
    for (int nIndex = 1; nIndex < nSize; ++nIndex)
    {
        int nInsertIndex = nIndex - 1;
        for (; nInsertIndex >= 0; --nInsertIndex)
        {
            if (arry[nInsertIndex] < arry[nIndex])
            {
                break;
            }
        }

        int nInsertValue = arry[nIndex];

        for (int nTmpIndex = nIndex; nTmpIndex > nInsertIndex + 1; --nTmpIndex)
        { 
            arry[nTmpIndex] = arry[nTmpIndex - 1];
        }
	    arry[nInsertIndex + 1] = nInsertValue;
    }    
}

参考:https://www.cnblogs.com/onepixel/articles/7674659.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值