
S3: 排序算法
涛歌依旧
毕业后就职于华为和腾讯
展开
-
手机号码之基数排序
七大常见排序是:冒泡排序、选择排序、插入排序、归并排序、希尔排序、快速排序和堆排序,它们都是基于比较的排序,时间复杂度最好能达到O(NlogN). 三大特殊排序是:计数排序、桶排序和基数排序,它们是非比较的排序,时间复杂度为线性。 在一些笔试面试题目中,排序算法几乎是必然会涉及到的,尤其是对于校招而言。原创 2020-09-05 12:26:49 · 3992 阅读 · 2 评论 -
华山论剑之桶排序
华山论剑开始,报名名单为:郭靖,黄蓉,洪七公,欧阳锋,欧阳克,周伯通,瑛姑,黄药师,杨康,穆念慈,柯镇恶,尹志平。 要获取所有参赛者的最终排名,该如何设计算法呢?如果用冒泡排序、选择排序、插入排序、希尔排序、堆排序、快速排序、归并排序,可能导致一些既浪费时间又浪费表情的比赛。可以考虑把参赛人分为四个水平段位,然后,在相同的水平段位中分别比较,这就是所谓的桶排序。原创 2020-09-05 12:23:45 · 2816 阅读 · 3 评论 -
高考分数排序之计数排序
在社会上摸爬滚打了几年,见识了一些人和事,越发意识到高考的重要性。很多高校和企业在招聘时,都非常看重学历(甚至是第一学历),这种筛选条件很世俗,但从概率的角度来看,合情合理。 高考成绩马上就要出来了,来聊聊与高考相关的算法问题。 问题:参加全国高考数学考试的人数为n, 数学满分为k(k=150), 求数学分数的排序结果。要求:时间复杂度为O(n).原创 2020-09-05 12:22:04 · 3092 阅读 · 4 评论 -
用go语言来玩下冒泡排序
用go语言来玩下冒泡排序, 主要是熟悉一下Go语法:package mainimport "fmt"func bubble_sort(a []int){ n := len(a) for i := 0; i < n - 1; i++ { for j := 0; j < n - 1 - i; j++ { if ...原创 2018-08-12 22:02:57 · 4125 阅读 · 2 评论 -
用go语言来玩下选择排序
用go语言来玩下选择排序, 找找go的感觉:package mainimport "fmt"func select_sort(a []int){ n := len(a) for i := 0; i < n; i++ { pivot := i; pivotKey := a[i]; for j := i + 1;...原创 2018-08-14 22:08:31 · 3939 阅读 · 2 评论 -
计数排序(线性复杂度的排序,且不需要进行大小比较)
计数排序思想很美妙,不需要进行元素间大小的比较,时间复杂度是线性的,在实践中,经常采用计数排序,该排序稳定。计数排序要求元素大小限定在一定范围内,比如[0, k], 算法代码如下: #includeusing namespace std;// 0 <= a[i] <= k (其中i = 0, 1, 2,..., n-1)void countSort(int a[], int原创 2012-10-21 22:59:40 · 9013 阅读 · 3 评论 -
堆排序(某公司校园招聘面试题目)
堆排序是一种高级的选择排序,算法代码如下: #includeusing namespace std;void heapAdjust(int a[], int low, int high){ int pivotKey = a[low - 1]; int i; for(i = 2 * low; i <= high; i *= 2) { if(i < hi原创 2012-10-21 22:48:53 · 9890 阅读 · 9 评论 -
快速排序(某公司社招面试试题)
快速排序是对冒泡排序的改进,算法代码如下: #includeusing namespace std;int partition(int a[], int low, int high) //划分{ int pivotKey = a[low]; while(low < high) { while(low = pivotKey) high--; a原创 2012-10-21 22:37:12 · 8553 阅读 · 3 评论 -
归并排序
#includeusing namespace std;//将有序表a[first...mid]和a[mid + 1...last]归并成a[first...last]void merge(int a[], int first, int mid, int last){ int length = last - first + 1; int i = first; int原创 2012-10-21 13:12:08 · 7886 阅读 · 2 评论 -
希尔排序
希尔排序是对直接插入排列的改进,又叫缩小增量排序,就是将gap不断缩小的插入排序,代码如下:#includeusing namespace std;void shellSort(int a[], int n){ int i, j, pivotKey, gap; for(gap = n/2; gap > 0; gap--) { for(i = gap; i < n; i++)原创 2012-10-20 17:42:58 · 7997 阅读 · 4 评论 -
插入排序
经常打扑克的人一定熟悉插入排序,拿到第一张牌,把它放在手的最左边,在取第 i (i >= 2)张牌的时候,把它插入到已经排好序的(i - 1)张牌中,这就是插入排序。插入排序代码如下:#includeusing namespace std;void insertSort(int a[], int n){ int i, j, pivotKey; for(i = 1; i < n; i原创 2012-10-20 15:56:29 · 7972 阅读 · 2 评论 -
选择排序
选择排序的思路:皇帝选妃子,逐步选择“最嫩”的那个姑娘,最后结果便是从“最嫩”到“最老”的排序了。 #includeusing namespace std;void swap(int &x, int &y){ int tmp; tmp = x; x = y; y = tmp;}void selectSort(int a[], int n){原创 2012-10-19 14:04:24 · 8131 阅读 · 2 评论 -
冒泡排序
#includeusing namespace std;void swap(int &x, int &y){ int tmp; tmp = x; x = y; y = tmp;}void bubbleSort1(int a[], int n){ int i, j; for(i = 0; i < n - 1; i++) for(j = 0原创 2012-10-19 13:44:39 · 8868 阅读 · 5 评论 -
如何利用C语言中的qsort库函数实现快速排序?
之前,我们已经写过快速排序的程序,而在C语言的库函数中就有快速排序的库函数,即为qsort, 其用法如下:功 能: 快速排序头文件:stdlib.h用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));参数:1 待排序数组首元素的地址2 数原创 2013-06-03 22:21:30 · 48268 阅读 · 14 评论