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

插入排序

待补充 ...

希尔排序

待补充 ...

相关推荐
simon_skywalker7 小时前
线性代数及其应用习题答案(中文版)第二章 矩阵代数 2.1 矩阵运算(2)
线性代数·算法·矩阵
REDcker7 小时前
JS 与 C++ 语言绑定技术详解
开发语言·javascript·c++
June`7 小时前
C++11新特性全面解析(三):智能指针与死锁
开发语言·c++
认真敲代码的小火龙7 小时前
【JAVA项目】基于JAVA的医院管理系统
java·开发语言·课程设计
断剑zou天涯7 小时前
【算法笔记】Manacher算法
java·笔记·算法
码农12138号7 小时前
Bugku HackINI 2022 Whois 详解
linux·web安全·ctf·命令执行·bugku·换行符
Joren的学习记录8 小时前
【Linux运维进阶知识】Nginx负载均衡
linux·运维·nginx
用户2190326527358 小时前
Java后端必须的Docker 部署 Redis 集群完整指南
linux·后端
monster000w8 小时前
大模型微调过程
人工智能·深度学习·算法·计算机视觉·信息与通信
胡先生不姓胡8 小时前
如何获取跨系统调用的函数调用栈
linux