常见的排序算法

常见的排序算法及分类对比 排序算法大全及分类对比 阅读详情

近来由于手上有两个项目要写,没有时间构思和写博客= =。


现在属于校招季,计算机原理,算法和数据结构,c语言基础属于最重要的。这里把常考到的常用排序算法简单汇总了下。

包括冒泡排序,简单选择排序,直接插入排序,希尔排序,堆排序和快速排序。


//常用排序汇总

#include <stdio.h>

void swap(int *a, int *b);
void bubble_sort(int a[], int n);
void select_sort(int a[], int n);
void insert_sort(int a[], int n);
void shell_sort(int a[], int n);
void heap_adjust(int a[], int i, int n);
void heap_sort(int a[], int n);
void quick_sort(int a[], int low, int high);

int main()
{
    int arr[] = {0,2,3,1,6,9,8,7,4,5};
    
//    bubble_sort(arr, 10);
//    select_sort(arr, 10);
//    insert_sort(arr, 10);
//    shell_sort(arr, 10);
//    heap_sort(arr, 10);
    quick_sort(arr, 0, 9);
    
    for (int i = 0; i < 10; i++)
    {
        printf("%d\n", arr[i]);
    }
    
    return 0;
}

//交换数据
void swap(int *a, int *b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

//冒泡排序法
//时间复杂度O(n^2) 空间复杂度O(1)
void bubble_sort(int a[], int n)
{
    int i, j;
    //旗帜位,判断这次遍历是否有交换
    int flag = 1;
    
    for (i = 0; i < n && flag; i++)
    {
        flag = 0;
        for (j = n-2 ; j >= i; j--)
        {
            if (a[j] > a[j+1])
            {
                swap(&a[j], &a[j+1]);
                flag = 1;
            }
        }
    }
}

//简单选择排序
//时间复杂度O(n^2) 空间复杂度O(1)
void select_sort(int a[], int n)
{
    int i, j, min;
    
    for (i = 0; i < n ; i++)
    {
        min = i;
        for (j = i+1; j < n; j++)
        {
            if (a[j] < a[min])
            {
                min = j;
            }
        }
        if (min != i)
        {
            swap(&a[min], &a[i]);
        }
    }
}

//直接插入排序
//时间复杂度O(n^2) 空间复杂度O(1)
void insert_sort(int a[], int n)
{
    for (int i = 0; i < n ; i++)
    {
        int temp = a[i];
        int j = i-1;
        while (j>=0 && a[j] > temp)
        {
            a[j+1] = a[j];
            j--;
        }
        a[j+1] = temp;
    }
}

//希尔排序
//时间复杂度为O(nlogn) 空间复杂度为O(1)
void shell_sort(int a[], int n)
{
    int i,j,temp;
    int gap = 0;
    while (gap <= n) gap = gap*3+1;
    while (gap > 0)
    {
        for (i = gap; i < n; i++)
        {
            temp = a[i];
            j = i - gap;
            while (j >= 0 && a[j] > temp)
            {
                a[j+gap] = a[j];
                j = j - gap;
            }
            a[j+gap] = temp;
        }
        gap = (gap-1)/3;
    }
}

//堆排序
//时间复杂度为O(nlogn) 空间复杂度为O(1)
void heap_sort(int a[], int n)
{
    for (int i = n/2 - 1; i >= 0; i--)
    {
        heap_adjust(a, i, n);
    }
    for (int i = n-1; i > 0; i--)
    {
        swap(&a[0], &a[i]);
        
        heap_adjust(a, 0, i);
    }
}

//构建大顶堆
void heap_adjust(int a[], int i, int n)
{
    int child, temp;
    
    for (temp = a[i]; 2*i+1 < n; i = child)
    {
        child = 2*i+1;
        //取得较大子结点索引
        if (child < n -1 && a[child] < a[child+1]) child++;
        //保证父结点大于等于子结点
        if (temp < a[child]) swap(&a[i], &a[child]);
        else break;
    }
}

//快速排序
//时间复杂度为O(nlogn) 空间复杂度为O(logn) ~ O(n)
void quick_sort(int a[], int low, int high)
{
    int i = low+1;
    int j = high;
    int key = a[low];
    
    if (low >= high) return;
    
    while (1) {
        while (key<a[j]) j--;
        while (key>a[i] && i<j) i++;
        if (i >= j) break;
        
        swap(&a[i], &a[j]);
        
        if (a[i] == key) j--;
        else i++;
    }
    
    swap(&a[low], &a[j]);
    
    if (i-1>low) quick_sort(a, low, i-1);
    if (j+1<high) quick_sort(a, j+1, high);
}


刚看到优快云也有oc的代码模板了:)以后估计方便了不少。

黑客渗透测试后门隐藏技术揭秘 本文介绍了在授权渗透测试中隐藏后门文件(muma.exe)的多种技术手段。主要包括:通过WinRAR自解压脚本将后门与正常程序捆绑实现双开;利用系统自动运行目录和注册表实现开机自启;修改文件图标伪装成常用软件;将文件存放在冷门系统目录;设置系统+隐藏双重属性增强隐蔽性。此外还涉及对抗安全软件的加壳(UPX)、免杀(msfvenom编码)技术,以及进程注入、日志清除等运行隐藏方法。所有技术仅限合法授权测试使用,未经授权使用将面临法律责任。 阅读详情

相关推荐

总结:知识图谱KG+大模型LLM

知识图谱KG+大模型LLM

安静的软件工程师 4209

常见排序算法小结

     排序算法经过了很长时间的演变,产生了很多种不同的方法。对于初学者来说,对它们进行整理便于理解记忆显得很重要。每种算法都有它特定的使用场合,很难通用。因此,我们很有必要对所有常见的排序算法进行归纳。      我不喜欢死记硬背,我更偏向于弄清来龙去脉,理解性地记忆。比如下面这张图,我们将围绕这张图来思考几个问题。      上面的这张图来自一个PPT。它概括了数据结构中的所有常见的排序算法。现在有以下几个问题:      1、每个算法的思想是什么?      2、每个算法的稳定

Simple life 11万+

银河麒麟高级服务器操作系统V10SP2(X86)PXE无人值守批量部署实战指南

本文详细介绍了银河麒麟高级服务器操作系统V10SP2(X86)PXE无人值守批量部署的实战指南。通过PXE网络引导技术,实现全自动化、高效率的系统部署,特别适用于企业级数据中心和国产化替代项目。文章涵盖基础环境准备、关键服务配置、Kickstart高级定制及部署测试等核心内容,帮助用户快速掌握批量部署技巧。

weixin_42525637的博客 382

十种常见排序算法

0、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 0.2 算法复杂度 0.3 相关概念 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 .

liyongchunscr的博客 1万+

用户行为数据分析 User Behavior Data from Taobao for Recommendation

一、提出问题 二、理解数据 数据来源 阿里云天池数据集:(https://tianchi.aliyun.com/dataset/dataDetail?dataId=649) 本文选取的数据集为UserBehavior.csv,共有5242880条数据。数据的具体类别如下表所示: 用户行为种类有四种,如下表所示 对于数据维度的说明如下: 在本文选取的2017年11月25日到2017年12月3日的时间范围内,不重复的用户数量为10202,不重复的商品ID数为412369,不重复的商品类目ID数为5859,

cccxxxqq的博客 5206

Mac新手必看:为什么你的终端找不到Python命令?5分钟搞定zsh报错

本文针对Mac用户在终端遇到“zsh: command not found: python”报错的问题,提供了深度解析与实战修复指南。文章解释了macOS系统因历史原因默认使用`python3`而非`python`命令,并详细介绍了四种解决方案:养成使用`python3`的习惯、创建别名、通过Homebrew安装链接以及修改PATH环境变量,帮助新手快速解决zsh报错,顺利开始Python开发。

weixin_29248653的博客 594

常见的10种排序算法

介绍常用的10种排序算法

懒猫的脚印 3万+

碳化硅外延层厚度测量:红外干涉光谱与FFT技术详解

薄膜厚度测量是半导体制造中的关键工艺控制环节,其核心原理基于光的干涉现象。当光在薄膜上下界面反射并叠加时,会产生与厚度相关的干涉条纹。通过分析这些条纹,可以非接触、无损地获取薄膜的精确厚度信息。这项技术的核心价值在于实现了对关键工艺参数的在线、快速监控,对于提升器件性能与生产良率至关重要。在第三代半导体,尤其是碳化硅功率器件的制造中,外延层厚度直接决定了器件的击穿电压和导通电阻等核心性能。红外干涉光谱法因其对碳化硅材料在红外波段的良好透过性,成为该领域主流的厚度测量方案。通过快速傅里叶变换(FFT)对采集到

weixin_29032489的博客 308

JS常见的排序算法

这里是修真院前端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析前端知识/技能,本篇分享的是: 【JS常见的排序算法 】 大家好,我是IT修真院北京分院第20期的学员王野,一枚正直纯洁善良的程序员 今天给大家分享一下,修真院官网JS任务4,深度思考中的知识点——JS常见的排序算法 一、背景介绍 ...

IT修真院:初学者转行到互联网的聚集地 553

北斗导航 | ILS(仪表着陆系统)、MLS(微波着陆系统)和GBAS(地基增强系统)的性能对比

最 早 的 GBAS 系 统 是 **局 域 增 强 系 统(LAAS)**,它是 1990 年由美国 Honeywell 公司 和 NASA 共 同 完 成 的 差 分 GPS(DGPS)演 变 而 来 的。1998 年,LAAS 被 ICAO 采 纳为 GBAS。2009 年 9 月 3 日 Honeywell 公 司 的GBAS 系统通过了 **CAT-I 精密进近着陆系统**的设计认证 ,而 **CAT-II 和 CAT-III 系统的研发和验证工作也正在有序的进行中**

尘世冰封的专栏 3985

Qt入门教程【基础控件篇】QLineEdit输入框

QLineEdit输入框

小鱼酱的博客 3262

常见的七种排序算法

目录 1.排序算法的概念及其运用 1.1 排序的概念 1.2 排序运用 1.3 常见的排序算法 2.常见排序算法的实现 2.1 插入排序 2.1.1直接插入排序 2.1.2 希尔排序(缩小增量排序) 2.2 选择排序 2.2.1 直接选择排序 2.2.2 堆排序 2.3 交换排序 2.3.1 冒泡排序 2.3.2 快速排序 2.4 归并排序 3.排序算法复杂度及稳定性分析 1.排序算法的概念及其运用 1.1 排序...

m0_58367586的博客 3312

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

常见排序算法

欢迎再次来到小鸥的博客,本系列总结了直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序八种(基数排序和桶排序不做演示)常见排序的原理,并使用C语言再现,快排和归并由于实现方法有多种,篇幅较长,将单独在第二篇讨论本篇中代码使用C,且数据序列使用数组为例。

小二丶的博客 1914

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

常见排序算法效率比较

常见排序算法效率比较 排序比较

eric的博客 427

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

常见排序算法详解

排序是我们在日常生活和工作中常见的一种操作。在计算机科学中,排序算法就是将一串或一组数据按照特定的顺序进行排列的算法。这些顺序可能是数字的升序或降序,也可能是字母或字词的字母顺序等。我们将探讨几种不同的排序算法,包括他们的原理、优缺点以及代码实现。常见的排序算法包括:冒泡排序、快速排序、插入排序、选择排序、希尔排序、归并排序、堆排序、基数排序等。这些排序算法中,有些是比较排序,即通过比较元素之间的关系进行排序;

沐雨风栉 874

常见排序算法记录和理解

本篇讲一下博主对常见排序算法的理解,包括冒泡、选择、插入、希尔、堆、桶、快排、归并、外部排序

yxc_71411的博客 1486

常见的排序算法总结

1.从左向右依次对比相邻元素,将较大值交换到右边; 2.每一轮循环可将最大值交换到最左边 3.重复1.2两个步骤,直至完成整个数组。 2.选择排序 选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 3.插入排序 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工

X_loveforever的博客 1107

常见的7种排序算法小结

1. 冒泡排序:每次比较相邻两个元素,然后交换它们的位置,重复这个过程直到整个数组排序完成。 2. 选择排序:每次从未排序的部分选出最小(或最大)的元素,然后与未排序部分的第一个元素交换位置,如此反复直到整个数组排序完成。 3. 插入排序:从第二个元素开始,将每个元素插入到已排序的数组中的适当位置,直到整个数组排序完成。

datian1234的博客 1500

常见的排序算法的时间复杂度

接着,对每个桶中的元素进行排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后依次将各个桶中的元素取出,得到的就是有序序列。计数排序不是基于比较的排序算法,其优势在于在对一定范围内的整数排序时,复杂度为O(n+k),其中n为输入元素个数,k为待排序列中最大的数。例如,如果数据的范围非常大,或者数据的分布极不均匀,那么可能需要大量的桶,这可能导致空间复杂度的增加。基数排序的时间复杂度是线性的,为O(dn),其中d为数字的位数,n为待排序序列的长度。因此,时间复杂度为O(n^2)。

码字不易,大家的支持就是我坚持下去的动力 2万+

Java的几种常见排序算法

Java的几种常见排序算法 一、所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。 二、排序算法可以分为内部排序和外部排序。 内部排序是数据记录在内存中进行排序。 外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访

余生不过半载 151
上一篇: 为什么寄存器比内存快?
下一篇: IOS中常见的Operation —— NSOperation
RannieR
博客等级 码龄14年 180粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值