1. 程式人生 > >Python排序演算法的實現

Python排序演算法的實現

用Python實現了插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序。

1、插入排序

描述

插入排序的基本操作就是將一個數據插入到已經排好序的有序資料中,從而得到一個新的、個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為O(n^2)。是穩定的排序方法。插入演算法把要排序的陣列分成兩部分:第一部分包含了這個陣列的所有元素,但將最後一個元素除外(讓陣列多一個空間才有插入的位置),而第二部分就只包含這一個元素(即待插入元素)。在第一部分排序完成後,再將這個最後元素插入到已排好序的第一部分中。

程式碼實現

Python
123456789101112definsert_sort(lists):# 插入排序count=len(lists)foriinrange(1,count):key=lists[i]j=i-1whilej>=0:iflists[j]>key:lists[j+1]=lists[j]lists[j]=keyj-=1returnlists

2、希爾排序

描述

希爾排序(Shell Sort)是插入排序的一種。也稱縮小增量排序,是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。該方法因DL.Shell於1959年提出而得名。 希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序演算法排序;隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個檔案恰被分成一組,演算法便終止。

程式碼實現

Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 defshell_sort(lists): # 希爾排序 count=len(lists) step=2 group=count/step whilegroup>0: foriinrange(0,group): j=i+group whilej<count: k
=j-group key=lists[j] whilek>=0: iflists[k]>key:

相關推薦

Python學習——排序演算法實現

文章目錄 時間複雜度 空間複雜度 二分查詢 氣泡排序 選擇排序 插入排序 快速排序 歸併排序 計數排序 一直以來,我只是在大學學過C語言的資料結構中關於氣泡排序的演算法,到現在這麼多年也沒有學習過其它演算法,

Python排序演算法實現

用Python實現了插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序。 1、插入排序 描述 插入排序的基本操作就是將一個數據插入到已經排好序的有序資料中,從而得到一個新的、個數加一的有序資料,演算法適用於少量資

SWUST資料結構--希爾排序演算法實現

#include<iostream> using namespace std; int main(){ int i,n; int a[50]; cin>>n; for(i=0;i<n;i++) cin>>a[i]; for(i=0;i<

python常用演算法實現

排序是計算機語言需要實現的基本演算法之一,有序的資料結構會帶來效率上的極大提升。 1.插入排序 插入排序預設當前被插入的序列是有序的,新元素插入到應該插入的位置,使得新序列仍然有序。 def insertion_sort(old_list): n=len(old_list) k

插入排序演算法實現

輸入:n個數(a1,a2........) 輸出:升序排列好的陣列 #include <stdio.h> #include <stdlib.h> int main() { int i,j,n,a[100]; printf("請輸入要排序的陣列

排序演算法實現

堆的定義: 堆排序:基本思路,將待排序的一維陣列看成是一個完全二叉樹,將其生成一個堆,由定義可知,根元素必定是最小值(或最大值),將根輸出,然後將剩餘元素再調整成堆。 生成堆的方法:將序列看成一棵完全二叉樹,從最後一個非終端結點[n/2]開始,將該點與它的左右子樹根結點比較,將最小的

快速排序演算法實現 C# 版本

採用遞迴思想 實現了 快速排序演算法 如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespa

快速排序演算法實現

快速排序演算法的原理: 將數列中任取一個數,將其左部放置比其小的數,其右部放置比其大的數。然後,對其左,右部遞迴執行這種分割過程。   原始碼如下:   INT32 SortedData[] = { 1, 3, 2, 112, 3854, 2382, 2839

Python排序演算法(二) 快速排序、希爾排序、歸併排序

這篇文章有的排序演算法是:快速排序、希爾排序、歸併排序。 快速排序 ''' 快速排序 ''' def quick_sort(aList, first, last): if first >= last: return min_va

高階排序演算法實現與優化

本文用到的測試資料生成的程式碼和分析:《測試資料自動生成》 文章圖片來源於 GitHub,網速不佳的朋友請點我看原文。 順便軟廣一下個人技術小站:godbmw.com。歡迎常來 ♪(^∇^*) 1. 談談高階排序 本文主要介紹高階排序演算法中的歸併排序和快速排序。他們有運用了分支思想,並且大多通過遞迴來實現。

[排序]雞尾酒排序演算法實現

作者 zhonglihao 演算法名 雞尾酒排序 Cocktail Sort 分類 排序 複雜度 % 大概是1/2 * n^2時間複雜度 形式與資料結構 M

java中幾種常見的排序演算法實現

在Java中得資料結構比較 | 資料機構 | 優點| 缺點 | |陣列 | 插入快,在直到下標得情況下可快速地存取| 查詢慢,刪除慢,大小固定 | |有序陣列 | 比無序得陣列查詢快|刪除和插入慢,大小固定 | |棧 | 提供後進先出方式的存取| 存取其他項很

Python 排序演算法[一]:令你茅塞頓開,卻又匪夷所思

閱讀本文可以幫助你解開以下疑惑:演算法是什麼?演算法難不難?怎麼才能夠在短時間內熟悉業內的經典演算法呢?這些演算法用 Python 實現會是什麼樣的?它們的耗時會跟時間複雜度相關嗎? 神馬是演算法? 演算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰

Python排序演算法入門前

最近在寫一篇關於十大經典排序演算法的部落格,為了讓內容更加明瞭深入,需要一些更加詳細的構思;可能有的學者會問幾乎每一門程式語言都提供了相應的排序函式,為什麼還要了解這些排序演算法?對此個人看法是:學習這些演算法的詳細過程有助於加深對程式碼的理解,在學習的道路上會讓你對某些問題

排序演算法:希爾排序演算法實現及分析

希爾排序演算法介紹希爾排序是D.LShell 與1957年提出來的一種排序演算法,在這之前排序演算法的時間複雜度都是O(n^2),希爾排序演算法是突破這個時間複雜度的第一批演算法之一。我們知道直接插入排序演算法(不知道的請看:排序演算法:直接插入排序演算法實現及分析),在某些

希爾排序演算法實現(C++)

希爾排序是一種按照增量排序的方法。其中增量值是小於n的正整數。   shell排序的基本思想[1]是:     先取一個小於n的整數d1作為第一個增量,把檔案的全部記錄分成d1個組。所有距離為dl的倍數的記錄放在同一個組中。先在各組內進行直接插人排序;然後,取第二個增量d2<d1重複上述的分組和排序,直

Python排序演算法[二]:測試資料的迷霧散去

演算法試驗中不僅僅要嘗試使用不同的寫法,更要注意測試所用資料的規律性,它們都會直接影響測試結果。 在上一篇文章《Python 排序演算法[一]:令你茅塞頓開,卻又匪夷所思》中我們學習了排序演算法中比較費時間的三種:氣泡排序、選擇排序、插入排序。並且在測試過程中發現了匪夷所思的問題,但是這都難不倒諸

JAVA隨時筆記(四):常用的排序演算法實現

1、氣泡排序 原理: 比較array[n]和array[n+1]的大小,把大的數交換到後面,即array[n]>array[n+1],就交換。迴圈到陣列最後,就可以把最大值找出來,放到array[length-1]上。 第二次迴圈,把第二大的數交換到

C#常用8種排序演算法實現以及原理簡介

public static class SortExtention    {        #region 氣泡排序        /*         * 已知一組無序資料a[1]、a[2]、……a[n],需將其按升序排列。首先比較a[1]與a[2]的值,若a[1]大於a[

排序演算法實現-PHP

簡單意義上的桶排序: 桶排序的原理是先安排N+1個桶作為容器,若資料範圍為N的話。 然後將測試資料(所需排序的資料)進行迴圈,放入對應的桶內。資料一定是在範圍N內的。 最後,迴圈桶裡的元素,並且輸出