第二章 数据结构与算法

先来一个随机数数组生成器,为的是给排序提供数据

import random
def generat(n,numberl,number2):
    list=[]
    for i in range(n):
        a=random.randint(numberl,number2)
        list.append(a)
    return list

if __name__ == '__main__':
    print generat(10,5,15)

为什么要学习O(n^2)的排序算法
1.因为这是一般的算法基础,比如再面试时,可以先摆出这个算法,往往再写出这个算法的时候,往往都有思路了,这样可以让面试官看到你的想法。
2.编码简单,易于实现,是一些简单情景的首选
3.在一些特殊情况下,简单的排序算法更加有效
4.简单的排序算法是衍生出复杂的排序算法的起步基础
5.可以作为其它复杂算法的作子过程,改进更加复杂的算法。

排序算法 O(n^2)

先来几个简单的算法

最基本的排序

1.概念介绍

1.首先在列表中找最小的元素,放到数列的前边
2.在剩下的数列中找到最小的元素,放到剩下的数列的前边。
3.重复。

2.代码展示
def selectSort(list):
    for i in range(len(list)):
        minIndex=i
        for j in range(i+1,len(list)):
            if list[minIndex] < list[j]:
               list[minIndex],list[j]=list[j],list[minIndex]
    return list

注意:主要自己去实现一些自定义算法的实现。

在算法设计的时候,如何考量算法的效率?这里就要编写一个算法效率检验函数,用time函数来完成就可以了。用c语言0.18秒就能完成10000的排序,而python要4.5秒。
注意:今天又试了一下c++与python的效率,有时候的简单循环,python的效率竟然比c++还要高,那么python的循环中如果比c++慢的话,肯定是里边用了其它的高级语法。具体怎么回事需要自己去继续研究。

插入排序

1.概念介绍

首先以第一个元素为基准,再将这个元素与前一个元素相比较,如果后边这个元素比前边这个元素小,则与前一个交换,交换后再与前一个比较(如果有的话),依次比较到第一个元素。每次比较一次结束后,比较过的这些数组都是有序的。

2.代码展示
def insertSort(list):
    timea=time.time()
    for i in range(1,len(list)):
        for j in range(len(list)-i,len(list)):#倒着来,当i等于0时,那么就是第一个,这个时候也是导数第len(list)个,如果i时最后一个时,那么也就是说可能要比较前边的全部元素,就是range(0,len(list))
            if list[-j]<list[-j-1]:
                list[-j],list[-j-1]=list[-j-1],list[-j]
            else:
                break
    timeb=time.time()
    print timeb-timea
    return list

奇怪的时插入排序的执行实践比选择排序花费时间要多!!!!
其实再插入排序算法中时,里边有很多交换算法,相对于选择排序里的比较,所以更加耗时。

冒泡排序

1.概念介绍

第 1 次将第一个数与第 2 个数比较,如果第 1 个数大于第 2 个数,那么将第 1 个数与第 2 个数交换,这个时候前边最大的数就放到后边了,之后再将最大的这个数与下一个比较,如果比下一个大的话就与下一个交换,那么这样的话只要前边比较过的都在后边去了。比如现在是比较到了第i个,如果第i+1个大于第i个的话,那么这个时候第i+1个就是最大的,那么不管,继续比较第i+2个就是了;否则,如果第i+1个小于第i个的话,那么将第i个与第i+1个互换,这样换了之后,第i+1个依然是最大的一个,那么继续和第i+2个比较就是了。如此循环往复,每次比较完了,最大的那个数就放到了后边。

2.代码展示
for i in range(len(list)):
    for j in range(0,len(list)-1-i):#这里要防止它越界,因为下边有一个j+1,所以虽然这里-1了,但是不会疏忽这块的。
        if list[j]<list[j+1]:
            list[j],list[j+1]=list[j+1],list[j]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容