這三種排序方式可以說是最簡單,最常用的三種排序方式了。
值得說的是,在每種排序之後我都附加了其改進版本。
普通氣泡排序
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 ...