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

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;
}

相关推荐

  1. 数据结构算法()--排序

    2024-01-13 20:42:03       37 阅读
  2. 数据结构算法-排序算法

    2024-01-13 20:42:03       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-13 20:42:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-13 20:42:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-13 20:42:03       87 阅读
  4. Python语言-面向对象

    2024-01-13 20:42:03       96 阅读

热门阅读

  1. HTML基本语法

    2024-01-13 20:42:03       64 阅读
  2. 1月12日,每日信息差

    2024-01-13 20:42:03       70 阅读
  3. Android 8.1 隐藏设置中定位功能

    2024-01-13 20:42:03       66 阅读
  4. 【并发编程】锁

    2024-01-13 20:42:03       56 阅读
  5. 软件测试常问问题3

    2024-01-13 20:42:03       65 阅读
  6. MISGAN

    MISGAN

    2024-01-13 20:42:03      66 阅读
  7. 28. 找出字符串中第一个匹配项的下标

    2024-01-13 20:42:03       60 阅读