![](https://img-blog.csdnimg.cn/20200925094732841.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
排序
数据结构与算法 --- 排序
"小夜猫&小懒虫&小财迷"的男人
这个作者很懒,什么都没留下…
展开
-
【经典算法实现 11】希尔排序
排序原理对于大规模的的数据,插入排序很慢,因为他只能两两交互位置。可想而知,只能搞不到那里去。假设数据长度是n,插入排序第一轮需要跑n-1次而希尔排序的为了提高查询效率,引入了分组的概念。认为间隔k之间的数据都是有序的。如何数据长度为10。每次交换的次数,都是上一次的一半,一直交换到间隔为1为止。思路:选择一个k,假设每次间隔缩小1半,进行分组。对分为同一组的两个数,进行比较。依次从k递减到k位1.这时候数据就排序好了。上图来自: 《【算法学习】 七 希尔排序》代码实现如下:原创 2020-07-28 14:42:31 · 378 阅读 · 0 评论 -
【经典算法实现 6】快速排序算法(递归实现)
【经典算法实现 6】快速排序算法一、快速排序算法1、核心代码实现2、代码实测3、代码运行结果4、最坏情况结果测试一、快速排序算法快速排序算法是利用递归的思想,选取一个数作为参考值,设置两个指针,指针 p1 从开头向后,指针 p2 从结尾向前每当 指针 p1 找到一个比参考值大的数, 并且指针 p2 找到一个比参考值小的数时,交换两个数字。直到指针 p1 与 指针 p2 碰头时,停止。将参考值与指针p2 的值比较,如果大,则交换,否则交换指针p2 前一位的值。此时,以指针2 为界线,划原创 2020-07-24 15:07:41 · 443 阅读 · 0 评论 -
【经典算法实现 4】二分法查找(循环,递归)
【经典算法实现 4】二分法查找 循环,递归一、利用循环的方式实现二分法1. 核心代码实现2. 代码实测二、递归实现二分法查找1. 核心代码实现2. 代码实测一、利用循环的方式实现二分法假定在一个有序数组中查找某个数的位置,使用二分法是比较好的选择。1. 核心代码实现其核心代码如下:// 循环二分法实现数字查找 void find_num(int *array, int array_len, int aim){ int len=array_len, flag=0; int *p=array原创 2020-07-23 15:37:44 · 510 阅读 · 0 评论 -
【经典算法实现 3】冒泡排序算法(单向冒泡,双向冒泡)
【经典算法实现 3】冒泡排序算法 及 算法优化一、冒泡排度算法实现 (n^2)(从小到大)1. 核心算法实现2. 代码实测一、冒泡排度算法实现 (n^2)(从小到大)冒泡排序的思想就是:每次选取两个元素进行比较,如果后者小于前者,则将两个数据进行交换。如果数据个数为n,需要比较的次数为n(n-1) / 2,时间复杂度记作 O(n^2)1. 核心算法实现void sort(int *array, int array_len){ int i=0, j=0, k=0 for(i = 0;原创 2020-07-23 11:41:13 · 805 阅读 · 3 评论 -
【经典算法实现 1】选择排序法 O(n^2)
一、大O表示法大O表示法是一种特殊的表示法,指出了算法的速度有多快,指出了最糟情况下的运行时间。O(n) 的意思是在最糟糕的情况下,n 为需要运行的次数。log n^m 的意思是,要几个n 相乘才会得到m。所以使用二分法,其速度为 O( log 2^m ),其中m 为元素个数总和。1.1 一些常见的大O 运行时间O(log n),也叫对数时间,这样的算法包括二分查找。O(n),也叫线性时间,这样的算法包括简单查找。O(n * log n) 这样的算法包括快速排序 ——一种速度较快的排序算原创 2020-07-10 10:25:37 · 418 阅读 · 0 评论