
排序
数据结构与算法 --- 排序
小馋喵星人
这个作者很懒,什么都没留下…
展开
-
【经典算法实现 11】希尔排序
排序原理 对于大规模的的数据,插入排序很慢,因为他只能两两交互位置。 可想而知,只能搞不到那里去。假设数据长度是n,插入排序第一轮需要跑n-1次 而希尔排序的为了提高查询效率,引入了分组的概念。认为间隔k之间的数据都是有序的。如何数据长度为10。 每次交换的次数,都是上一次的一半,一直交换到间隔为1为止。 思路: 选择一个k,假设每次间隔缩小1半,进行分组。 对分为同一组的两个数,进行比较。 依次从k递减到k位1.这时候数据就排序好了。 上图来自: 《【算法学习】 七 希尔排序》 代码实现如下:原创 2020-07-28 14:42:31 · 423 阅读 · 0 评论 -
【经典算法实现 6】快速排序算法(递归实现)
【经典算法实现 6】快速排序算法一、快速排序算法1、核心代码实现2、代码实测3、代码运行结果4、最坏情况结果测试 一、快速排序算法 快速排序算法是利用递归的思想, 选取一个数作为参考值,设置两个指针,指针 p1 从开头向后,指针 p2 从结尾向前 每当 指针 p1 找到一个比参考值大的数, 并且指针 p2 找到一个比参考值小的数时,交换两个数字。 直到指针 p1 与 指针 p2 碰头时,停止。 将参考值与指针p2 的值比较,如果大,则交换,否则交换指针p2 前一位的值。 此时, 以指针2 为界线,划原创 2020-07-24 15:07:41 · 481 阅读 · 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 · 570 阅读 · 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 · 920 阅读 · 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 · 454 阅读 · 0 评论