自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

weiwenhp

追求理性之美,简单之美

  • 博客(14)
  • 收藏
  • 关注

原创 各种排序算法比较(2):时间复杂度,空间复杂度

 时间复杂度n^2表示n的平方,选择排序有时叫做直接选择排序或简单选择排序 排序方法 平均时间 最好时间 最坏时间 桶排序(不稳定) O(n) O(n) O(n) 基数排序(稳定) O(n) O(n) O(n) 归并排序(稳定) O(nlogn) O(nlogn) O(nlogn) 快速排序(不...

2013-02-28 17:33:55 64801 4

原创 各种排序算法比较(1):稳定性

前面有讲到了9种排序算法:1.简单选择排序 2.堆排序        (1和2是属于选择排序)3.直接插入排序 4.希尔排序     (3和4属于插入排序,有时把改进后的直接插入排序叫做二分插入)5.冒泡排序         6.快速排序     (5和6属于交换排序.交换排序顾名思义是不停的交换数据位置.但实际上选择排序也在不停的交换元素,但次数较少,只有找到最大值才一次交换.侧重点...

2013-02-28 16:15:01 17695 1

原创 (五)选择排序:简单选择排序,堆排序

所谓选择嘛就是从待排序的元素中先选个最大的或最小的出来放一边,然后重复同样的操作.简单选择排序就是遍历那些未排序的元素,而堆排序则是利用大堆或小堆从中选择最大或最小值,因为大堆堆顶值就是最大值(小堆堆顶是最小值). 简单选择排序: void SimpleSelectSort(int* arr, int len){int tmp;int maxValIndex;f...

2013-02-28 10:27:59 2017

原创 (四)分配排序:桶排序(Bucket Sort)

桶排序的思想和基数排序有点类似,都要借助临时空间.基数排序是先映射到大小为10的计数数组中,然后再映射到大小等于待排序数组长度的临时数组中.而桶排序就是直接整个足够大的临时数组,把待排序的元素全部映射过来.其索引为待排序元素数值.所以为了确定临时数组的大小得先算出数组中最大数. 简单桶排序int GetMaxVal(int* arr, int len){    int ma...

2013-02-27 17:29:39 5989 3

原创 (四)分配排序:基数排序(radix sort)

我们知道假如一个正整数A大于数B,要么就是A的位数更多点,要是相同位数则从高往低数起,必有某一位大于B.基数排序就是把一待排序的元素每一位(个,十,百...)拆分出来排序.先从个位,然后再十位.那么首先肯定要确定下待排序中的元素最大数有多少位.然后再借助一个临时数组和一个计数的大小为10的数组辅助每一轮的排序.//先计算出待排序元素最大数的位数int MaxDigit(int* arr...

2013-02-27 15:00:19 2362

原创 (三)归并排序

我们知道把两个已经排好序的数组合并成一个是很容易,也非常快的.于是根据这种思路就有个归并排序.归并排序(Merge Sort)并归排序利用了递归的思想,把数组分割成很多小的数组序列,然后两两合并,最终整个数组有序.因为递归到一个子数组序列只有一个元素时,然后将这样的数组合并就得到2个元素的有序数组,依次类推.//合并两个子数组序列,以mid为中间点,begin,end为前后界限,分割成...

2013-02-27 10:35:50 1635

原创 (二)插入排序:直接插入排序,希尔排序

直接插入排序指的是先将一小部分排好序,然后从未排序的元素中找一个出来.遍历已排序好的数组,插入到合适位置. 直接插入排序:void StraightInsertSort(int* arr, int len){    int tmp;    int j;    for(int i = 1; i < len; i++)       {           tm...

2013-02-26 20:03:45 1383

原创 二分查找

其实我们平时翻书时就不自觉的用了类似二分查找的算法,知道要找哪一页X,然后随手翻到一个中间位置,X小于该页数,则继续翻前面的部分,否则只翻后面的部分.注意:使用二分查找的数组必须是已经排好序的方法1 :使用递归思想//返回值是查询值的索引(索引是从0开始计数的),left,right是左边与右边的索引,val是待查询的值int BinarySearch(int* arr, int ...

2013-02-26 16:43:23 765

原创 (一)交换排序:冒泡排序,快速排序

交换排序指当元素位置相反时则把两个元素交换一下.多次重复这样的步骤则可排好所有的序.冒泡排序和快速排序都属于交换排序. 冒泡排序一讲到冒泡两字你就会想到水里早泡泡,当然我们要做个假设,就是最轻的泡泡最先泡出来.方法1:于是根据这样的思路,从右到左遍历一下数组,比较相邻的两元素,交换位置把小的放前面.这样一路下来,所有数组中最小的就跑前面去了.接下来把剩下的元素再遍历两两对比并交换,...

2013-02-26 14:30:49 8393

原创 排序算法简介

一说到算法可能大家觉得最熟悉的就是排序算法,学数据结构与算法的课时肯定会学.排序算法主要分五大类交换排序,插入排序,选择排序,归并排序,分配排序 1.交换排序(exchange sort)冒泡排序,快速排序属于交换排序.所谓交换嘛,就是比较待排序的关键字,如果次序相反时则交换.当只交换相邻元素的位置时就叫冒泡排序,交换左右两部分的元素则叫快速排序,它用到了递归的思想. ...

2013-02-26 11:40:29 909

原创 C++ 内连接与外连接

啥叫内连接 外连接我们知道编译的时候(假如编译器是VS),是以源文件cpp文件为单位,编译成一个个的obj文件,然后再通过链接器把不同的obj文件链接起来.简单的说,如果一些变量或函数的定义是内连接的话,链接器链接的时候就不会拿它们去与obj比较看有重复定义不,一个源文件中的extern声明的变量或函数也不能使用另外一个源文件中的内连接的变量或函数.而如果是外连接的话则需要在不同的obj中

2013-02-21 15:23:40 3301 1

原创 日语五十音图详解

我们知道英语是由26个字母组成.汉语是由横竖撇捺点折组成(当然如果细化还有很多,竖钩,弯钩之类的.详见http://www.lbx777.com/ywfj/ywcs/wz/wz02.htm 日语的词是怎么组成的呢?它有点特别,我觉得有点像是中西结合的感觉.一个日语中的词有可能存在三种不同的写法.平假名,片假名,日语汉字.或者是三者的组合.但一般有一个较常用固定的写法.先不管日语汉字

2013-02-05 15:34:53 4064 4

原创 大学软件专业课程回顾(二)概率与统计

统计学官方一点的定义:统计学是一门通过搜索、整理、分析数据等手段,以达到推断所测对象的本质,甚至预测对象未来的一门综合性科学 统计可以这样简单的来理解.统计就是收集各种各样的数据,然后对这些数据做一些分析,得出一些有用的结论.政府不是有个部门叫统计局嘛收集的数据相同,结论未必相同.有些比较坑爹的会拿些不具普遍性的数据来得出些结论.比如某个地方的村民去年收入几千元,但可能村里有一

2013-02-04 17:03:53 936

原创 C++对象模型(1):对象内存布局简介

我们知道当实例化一个类时,也就是产生一个对象时需要分配内存空间.那一个对象具体需要多少字节的内存空间? 通过些什么规则计算出来的? 假如有如下一个类------------------------------------------------------------------------------------------------------------------------

2013-02-04 11:45:13 1386

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除