这里我们开始复习排序的一些面试题。 首先我们来看一下各个排序方法的时间复杂度和稳定性的比较,见下面表格: B是真数(0-9), R是基数(个十百) 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。 1.冒泡排序: 算法原理:比较相邻的 ...
分类:
编程语言 时间:
2016-06-10 12:23:04
阅读次数:
226
一、链表选择排序
void SelectSort(pLinkList list) //选择排序
{
assert(list);
if (NULL == list->pHead || NULL ==list->pHead->next) //如果是空链表或者只有一个结点则直接结束
{
return;
}
pLinkNode cur = list->p...
分类:
编程语言 时间:
2016-06-09 18:40:26
阅读次数:
242
数组的冒泡排序与选择排序
chunli@ubuntu:~/select$catmain.c
#include<stdio.h>
#include<stdlib.h>
intswap_conut=0; //记录交换次数
intloop_count=0; //记录循环次数
voidswap(int*a,int*b) //指针级数据交换
{ //一个数连续异或同样的数两次,还是这个数
//..
分类:
编程语言 时间:
2016-06-09 00:50:17
阅读次数:
138
#pragmaonce
voidSelectSort(int*array,intn)
{
assert(array);
intleft=0;
intright=n-1;
while(left<right)
{
intminIndex=left;
intmaxIndex=right;
for(inti=left;i<=right;++i)
{
if(array[i]<array[minIndex])
minIndex=i;
if(a..
分类:
编程语言 时间:
2016-06-08 12:36:47
阅读次数:
290
排序算法可谓数据结构模块中的重中之重,常见的哈希表,二叉树,搜索树/平衡树,位图等数据结构只是处理实际问题的抽象方法,实际在处理接受或生成的数据集时,排序算法显得尤其重要,排序算法家族很庞大,其中包括了冒泡排序,选择排序,插入排序,堆排序,快速排序,归并排序,基数排序,计数排序,希尔排序,箱排序,树型排序等众多算法,每种排序都有各自的特性,没有好坏之分,只有在特定的场景使用合适的排序算法才是上策,单纯的来比显得太过绝对,没有可比性。因为实际需求及各方面条件的限制使得排序算法的可选范围往往只缩小到某一种或某几...
分类:
编程语言 时间:
2016-06-07 06:37:23
阅读次数:
291
模板部分(想背的就背一下吧,但是不建议……毕竟排序用sort函数就行了,这些排序的算法只是为了锻炼你的思维逻辑能力罢了): 1.选择排序 #include<cstdio> #define N 100000+100 int a[N],n; int main() { scanf("%d",&n); fo ...
分类:
编程语言 时间:
2016-06-06 21:54:00
阅读次数:
211
常用排序算法的时间复杂度和空间复杂度
排序法
最差时间分析
平均时间复杂度
稳定度
空间复杂度 冒泡排序
O(n2)O(n^2)
O(n2)O(n^2)
稳定
O(1)O(1)
快速排序
O(n2)O(n^2)
O(n?log2n)O(n*log_2n)
不稳定
O(log2n)O(log_2n)~O(n)O(n)
选择排序
O(n2...
分类:
编程语言 时间:
2016-06-06 17:13:23
阅读次数:
257
作业的具体要求如下: 编写一个完整的程序,实现如下功能。(1) 输入10个无序的整数。(2) 用选择排序法将以上接收的10个无序整数按从大到小的顺序排序。(3) 要求任意输入一个整数,用折半查找法从排好序的10个数中找出该数,若存在,在主函数中输出其所处的位置,否则,提示未找到。提示:可定义inpu ...
分类:
编程语言 时间:
2016-06-05 06:30:33
阅读次数:
268
排序算法有很多种,大家最先想到的大多是基于比较的排序吧,像冒泡排序、选择排序、插入排序都属此类。这些都是很容易想到的算法,它们的思想简单。但都有个缺点,就是比较慢,时间复杂度从O(n2)到O(Nlog(N))不等,在数据量小的时候还好,但应付大数据时就心有余而力不足了。 那有没有更快的算法呢?答案是 ...
分类:
编程语言 时间:
2016-06-04 21:59:29
阅读次数:
237
SelectSort:(以升序为例)
选择排序的基本思想:初始时,有序区为0,每一趟在无序区中选出一个关键字最小的元素,然后与无序区第一个元素交换,然后无序区减1,有序区加1,直到记录全部排完。
直接选择排序:第一趟排序在R[0..n]中选出一个关键字最小的与R[0]交换,第二趟在R[1..n]中选择一个最小的与R[1]进行交换,以此类推直到无序区的记录只剩一个时排序完成。...
分类:
编程语言 时间:
2016-06-04 00:40:13
阅读次数:
214