排序演算法算是比較基本的演算法,同時也是最重要的演算法,涉及到的知識也比較多,下面記錄一下各種排序演算法的實現,包括插入排序,選擇排序,快速排序,歸併排序,氣泡排序等常見的排序演算法:
1、插入排序:
插入排序的原理是每次將乙個數插入到有序的集合中,從演算法實現的角度講,就是進行n趟遍歷,沒次將第i個數插入到前面有序的集合中,最後達到有序。從這我們可以看出演算法的複雜度是o(n^2),在實現時將第i個數與前面的i-1個數進行比較,如果小於就交換,最後插入到合適的位置。
void insert_sort(int a, int n)
}
2、選擇排序
顧名思義,選擇排序就是每次在候選集合中選擇最小的數插入到候選結合的開頭,並且不斷的縮小候選集合的過程,從演算法實現的角度講,就是要進行n詞遍歷,每次在候選集合中選擇最小的數放在候選集合前部的過程,並且不斷的縮小候選集。
void select_sort(int a, int n)
swap(a[i], a[min]);
}}
3、快速排序
快速排序是最常用的也算是經典的排序演算法,它是通過分治遞迴的方式實現,通過選取哨兵,並將元素與哨兵比較,按照大小將陣列切分成兩部分,並對這兩部分按照同樣的方式進行遞迴計算,最後達到有序。
int quick_sort(int a, int l, int h)
a[i] = x;
}
4、歸併排序
歸併排序也是用分治遞迴的思想進行求解,想將小塊進行排序,然後合併來實現,歸併排序的演算法複雜度是o(n*logn),空間複雜度是o(n)
void mergerarray(int a, int first,int mid, int last, int tmp)
while(i < m)
tmp[k++] = a[i++];
while(j < n)
tmp[j++] = b[j++];
for (i = 0; i < k; i++)
a[first + i] = temp[i];
}void mergesort(int a, int first, int last, int tmp)
}
5、氣泡排序
氣泡排序是o(n^2)複雜度的排序演算法,效率較低,需要n趟遍歷,每次將候選集中最小的數通過交換浮到最上面,也就是冒泡,還是很形象的。
void bubble_sort(int a, int n)}}
}
冒泡演算法也可以進行部分的改進,就是設定乙個標誌位,當交換不在發生的時候就可以認為排序已經結束,針對部分有序的陣列還是可以加快排序速度的。
排序演算法總結
1 直接插入排序 1 穩定性 穩定 2 適用情況 待排記錄規模較小,或者記錄已經基本有序 2 希爾排序 1 穩定性 不穩定 2 特點 希爾排序的執行時間依賴於增量序列,它的效率比直接插入排序有較大的改進。3 氣泡排序 1 穩定性 穩定 2 特點 當待排記錄基本有序是,氣泡排序是不錯的選擇 但由於氣泡...
排序演算法總結
1 選擇排序 選擇排序的思想是依次從待排序數列中選擇最大 小 的 第二大 小 的等等,然後依次重新排列為有序數列。void selectionsort int a,int n if min i 時間複雜度o n 2 2 歸併排序 void merge int a,int left,int mid,i...
排序演算法總結
學習了這麼多的排序演算法,還沒有做個總結,呵呵 氣泡排序 氣泡排序是最慢的排序演算法。在實際運用中它是效率最低的演算法。它通過一趟又一趟地比較陣列中的每乙個元素,使較大的資料下沉,較小的資料上公升。它是 o n 2 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...