
算法
lions88
软件工程专业小本,毕业后一直从事互联电视的软件开发
展开
-
几种常用算法的复杂度比较
排序法平均时间最差情形稳定度额外空间备注冒泡O(n^2)O(n^2)稳定O(1)n小时比较好交换O(n^2)O(n^2)不稳定O(1) n小时比较好选择O(n^2)O(n^2)不稳定O(1)n小时比较好插入O(n^2)O(n^2)稳定O(1) 大部分已转载 2012-02-02 08:58:08 · 1131 阅读 · 0 评论 -
归并排序
归并排序,是采用分治法的一个非常典型的应用。时间复杂度O(nlogn)空间复杂度O(n)速度仅次于快速排序,但较稳定。#include using namespace std;/* * array是元素序列,其中从索引first开始到mid位置,按照升序排列, * 同时,从(mid+1)到last也已经按照升序排列, * merge()函数将把这两个已经排序好原创 2012-02-02 09:14:59 · 452 阅读 · 0 评论 -
直接插入排序
直接插入排序适用于大部分数据已经排好序的情况。是一种稳定的排序算法时间复杂度O(n^2)空间复杂度O(1)#include #include using namespace std;void insertSort(int *arr,int size){ int i,j,temp; for (i=1; i<size; i++) { if (arr[i] < ar原创 2012-02-02 09:24:31 · 449 阅读 · 0 评论 -
选择排序
/* * * fileName: 1.cpp * description: 选择排序 */#include #include using namespace std;void swap(int &a,int &b){ a ^= b; b ^= a; a ^= b;}void selection_sort(vector& v){ int size = v.s原创 2012-02-01 18:57:57 · 477 阅读 · 0 评论 -
希尔排序
希尔排序:实际上是基于插入排序的,在插入排序中相比较的是相邻的两个元素,但是如果一个很小的数在数组的最右端,而他本应该是在最左端的,这样的话所有中间的元素都要向右移动一位,并且执行了N次。希尔排序就是首先对大跨度的元素做比较并且进行移动,这样的就相对有序了,再在这个基础上进行普通的插入排序,效率就会高很多。效率:快速排序>希尔排序>简单排序希尔排序在最坏的执行效原创 2012-02-01 18:01:27 · 870 阅读 · 0 评论 -
堆排序
/* * 堆排序时间复杂度:O(nlogn)空间复杂度:O(1)属于不稳定排序算法。 (1)用大根堆排序的基本思想① 先将初始文件R[1..n]建成一个大根堆,此堆为初始的无序区② 再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换, 由此得到新的无序区R[1..n-1]和有序区R[n],且满足R[1..n-1].keys≤R[n]原创 2012-02-02 13:50:19 · 558 阅读 · 0 评论