冒泡 插入 選擇排序及其改進

2021-08-04 22:32:33 字數 1718 閱讀 7539

這三種排序方式可以說是最簡單,最常用的三種排序方式了。

值得說的是,在每種排序之後我都附加了其改進版本。

普通氣泡排序

void bubble_sort( int *array, int size )

}}

改進一:

氣泡排序中如果這一趟裡面沒有交換任何元素,說明陣列中每個元素都一排好序。就不用再繼續比較了。

void bubble_sort_adv1( int *array, int size )}}

}

改進二:

每次記住每趟第一次交換的位置和最後一次交換的位置,第一次交換位置之前的元素都已經排好序了,同理,最後一次交換的位置之後的元素都已經排好序了,這個不難想到,手動走一遍氣泡排序就可以看出來了,知道了這個規律就可以寫出下面的**了。

void bubble_sort_adv2( int *array, int size )}}

q = last_swap_end;

first_flag = 1;

p = last_swap_start;

}}

普通插入排序

//普通插入排序

void insert_sort( int *array, int size )

}}

改進一:融合二分查詢

//哨兵和二分查詢相結合的插入排序

void insert_sort_adv2( int *array, int size )

array[k] = target;

}}//[start, end)

//target在array中存在,返回對應下標,不存在返回較大下標

int bin_search( int *array, int start, int end, int target )

return start;

}

改進二:加入哨兵位

//帶哨兵的插入排序

void insert_sort_adv1( int *array, int size )

if ( j+1 != i )

array[j+1] = sentry;

}}

普通選擇排序

void select_sort( int *array, int size )

}

改進:二元選擇排序

普通的選擇排序每遍歷一次只能找到最小元素,但是其實在一次遍歷中還可以同時找到最大元素,這樣每次遍歷就能確定兩個元素的位置。

//二元選擇排序

void select_sort_adv1( int *array, int size )

if ( mini != i )

swap( &array[i], &array[mini] );

if ( maxi != i && maxi != j )

swap( &array[j-1], &array[maxi] );

}}

冒泡,插入,選擇排序

經典的排序演算法,此文章介紹三個 氣泡排序 它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。public void bubblesort int a while iswrap for int ...

冒泡 插入 選擇 快速排序

各位親 有時間可以去看看我的 金駿家居 店 買時說明在我的部落格看到有優惠哦 還有意外禮品贈送 真正的程式設計師 店 氣泡排序 每次找出最大或者最小的數放到序列的最後。插入排序 每一次查詢都把數放到已排序序列合適的位置。例子 4,3,2,1如數中的第乙個數肯定是有序的,從第二個數開始3小於4,放在已...

演算法 插入選擇氣泡排序

演算法 排序 n 2 時間複雜度是o n 2 的排序有插入,選擇,冒泡。由於演算法思想比較簡單易懂,也不複雜。我們就簡單講講。插入排序 乙個元素是有序的,從第二個元素開始,依次將每個元素插入到前面序列的對應位置,最終整個序列有序。外層n 1趟。void insertsort int a,int n ...