Linux C语言 33-排序算法

Linux C语言 33-排序算法

本节关键字:C语言 排序算法 选择排序 冒泡排序 快速排序

相关C库函数:

冒泡排序

冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。

c 复制代码
void BubbleSort(int* a, int n)
{
    for (int i = 0; i < n; i++)
    {
        int exchange = 0;
        // 单趟
        for (int j = 1; j < n - i; j++)
        {
            if (a[j - 1] > a[j]) 
            {
                exchange = 1;
                Swap(&a[j - 1], &a[j]);
            }
        }
        if (exchange == 0) //已经有序了
             break;
    }
}

选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

c 复制代码
void SelectSort(int* a, int n)
{
    int left = 0;
    int right = n - 1;
    while (left<right)
    {
        int mini = left, maxi = left;
        for (int i = left+1; i <= right; i++)
        {
            if (a[i] < a[mini]) 
                mini = i;
            if (a[i] > a[maxi])
                maxi = i;
        }
        Swap(&a[mini], &a[left]);
        if (maxi == left) //防止掉包(很容易漏,很重要!
            maxi = mini;
        
        Swap(&a[maxi], &a[right]);
        left++;
        right--;
    }
}

快速排序

在区间中随机挑选一个元素作基准,将小于基准的元素放在基准之前,大于基准的元素放在基准之后,再分别对小数区与大数区进行排序。

c 复制代码
void QuickSort(int* a, int begin, int end)
{
	// 子区间相等只有一个值或者不存在那么就是递归结束的子问题
	if (begin >= end)
		return;

	if (end - begin + 1 <= 13)
 	{
		InsertSort(a + begin, end - begin + 1);
	} 
	else
 	{
		int keyi = PartSort3(a, begin, end);
		// [begin, keyi-1]keyi[keyi+1, end];
		QuickSort2(a, begin, keyi - 1);
		QuickSort2(a, keyi + 1, end);
	}
}

插入排序

待补充 ...

希尔排序

待补充 ...

相关推荐
java修仙传几秒前
力扣hot100:每日温度
算法·leetcode·职场和发展
潇潇云起2 分钟前
mapdb
java·开发语言·数据结构·db
咚咚王者3 分钟前
人工智能之核心基础 机器学习 第十章 降维算法
人工智能·算法·机器学习
prettyxian5 分钟前
【QT】信号与槽基础:手动连接的原理与实践
开发语言·qt
傻乐u兔7 分钟前
C语言初阶————结构体
c语言·开发语言
weixin_445054727 分钟前
力扣热题52
开发语言·python
小杜今天学AI了吗8 分钟前
如何配置 linux 系统的conda 环境
linux·运维·conda
逑之10 分钟前
C语言笔记2:C语言数据类型和变量
c语言·开发语言·笔记
oMcLin11 分钟前
如何在Ubuntu 22.04 LTS上通过配置ZFS存储池,提升高吞吐量数据库的读写性能与可靠性?
linux·数据库·ubuntu
这就是佬们吗11 分钟前
告别 Node.js 版本冲突:NVM 安装与使用全攻略
java·linux·前端·windows·node.js·mac·web