第二章データ構造とアルゴリズム

2411 ワード

まず乱数配列生成器を1つください.ソートにデータを提供します.
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.符号化は簡単で、実現しやすく、いくつかの簡単な情景の第一選択である.いくつかの特殊な場合、簡単なソートアルゴリズムはより効果的である.簡単な並べ替えアルゴリズムは複雑な並べ替えアルゴリズムを誘導する初歩的な基礎である.他の複雑なアルゴリズムのサブプロセスとして、より複雑なアルゴリズムを改善することができる.
ソートアルゴリズムO(n^2)
まず簡単なアルゴリズムをいくつかください.
最も基本的なソート
1.概念紹介
1.まずリストの中で一番小さい要素を探して、数列の前に置く.残りの数列に最小の要素を見つけ、残りの数列の前に置きます.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]

奇妙な場合にソートを挿入する実行実践は、ソートを選択するよりも時間がかかります!!!実際に並べ替えアルゴリズムに挿入すると,中には交換アルゴリズムが多く,選択並べ替えの比較に比べて時間がかかる.
バブルソート
1.概念紹介
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]