氣泡排序,選擇排序,插入排序的c和python實現

2022-08-23 08:48:12 字數 2108 閱讀 4820

氣泡排序:

氣泡排序是經典排序演算法之一,時間複雜度為o(n2),基本原理如下列程式注釋:

python實現:

#

氣泡排序

#一次比較兩個元素,重複走訪

#數列中最大的數會在多次比較後直接挪到最後,下次比較時不參與

#因為越小的元素會慢慢'浮'到數列頂端,所以叫做氣泡排序#例程

defbubblesort(arr):

n =len(arr)

for i in

range(n):

for j in range(0, n-i-1):

if arr[j] > arr[j+1]:

arr[j], arr[j+1] = arr[j+1], arr[j]

c實現:

void bubble_sort(int arr, int

len)

}

對比兩程式可知,其都是通過兩級for迴圈實現氣泡排序功能。在python中,簡化了變數的宣告,並且通過a,b=b,a直接互換了陣列成員。

插入排序:

(一般按照最壞時間複雜度討論)  時間複雜度為o(n2)。通過c例程,看看它的實現方法。

首先將 arr[1] 存放在temp中,接著進入下乙個for迴圈中,這時,如果 arr[j-1],即 arr[0] 大於temp, arr[0] 中的元素就被放在 arr[1] 中,而之前的 arr[1] 中的元素就被放入了 arr[0] 中。簡單概括:arr[1]與前面的陣列元素進行了比較,大的被放在了後面。小的放在了前面。

而後,第二個for迴圈到來,這時,i=2,這時我們不難看出,在 for (j = i; j > 0 && arr[j - 1] > temp; j--) 這個迴圈中,arr[2] (temp)依次與前面的元素進行比較,如果前面的元素大於 temp , 前面的元素就會向後移動一次,如果前面的元素小於 temp,temp就排在這個元素的後方,這就是「插入」排序的核心意思。(查詢資料更容易理解,這裡略去)

c實現

//

插入排序:對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入

void insertion_sort(int arr, int

len)

}

python實現

#

插入排序

definsertionsort(arr):

for i in range(1, len(arr)):

key =arr[i]

j = i-1

while j >= 0 and key arr[j+1] =arr[j]

j -= 1arr[j+1] = key

選擇排序:

時間複雜度o(n2)。演算法實現:首先在所有陣列元素中找到最小值,並放在最前方,然後再去掉已排序的最小值陣列元素,接著找剩餘元素的最小值(即「選擇最小值」),放在前方,直到所有元素排序完成。

c實現:

//

選擇排序

void swap(int *a, int *b)

void selection_sort(int arr, int

len)

swap(&arr[i], &arr[min]); //

最小值與arr[i]做交換

}}

python實現:

#

選擇排序

#指定乙個元素

#依次比較,將最小的元素放在第乙個

#然後繼續比較剩下的元素,直至完成排序#例程

defseletesort(a):

for i in

range(len(a)):

min_id =i

for j in range(i+1, len(a)):

if a[min_id] >a[j]:

min_id =j

#將i號位與min_id號位的值調換(實際上a,b=b,a是調換了兩者的位址)

a[i], a[min_id] = a[min_id], a[i]

氣泡排序 選擇排序和插入排序

氣泡排序 思路 將相鄰的兩個數比較,將較小的數調到前頭 有n個數就要進行n 1趟比較,第一次比較中要進行n 1次兩兩比較,在第j趟比較中,要進行n j次兩兩比較。依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放...

氣泡排序和插入排序,選擇排序

插入排序原理 對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序核心 假設第乙個元素排好,之後的元素對排好的部分從後向前比較並逐一移動。選擇排序 按第乙個元素為基礎,遍歷所有元素,找出最小值,然後調換 公升序 include includevoid embed int a,in...

氣泡排序 選擇排序和插入排序

一 氣泡排序 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。重複以上過程,直至最終完成排序。氣泡排序是穩定的。演算法時間複雜度是o n 2 二...