每次說到排序,都會想起剛學習c語言那會的氣泡排序還有哨兵設定改進方法。但是看過演算法導論後才知道自己是多麼淺薄,排序的方法有很多。
問題描述:
輸入:n個數的乙個序列
輸出:序列滿足一定條件(如從大到小或是從小到大)的乙個排列
1、插入排序
思想:從打撲克牌說起,這是乙個很形象的例子,日常生活中抓牌的時候就是從第一張牌開始,每次新增一張牌,找到這張新增的牌的正確位置,插入。這樣每次插入之前的牌都是有序的。
偽**:
insertionsort(a):
for i=2 to a.length
for j=1 to i-1
if( a[i]>a[j])
set j=j+1;
else
insert(a[i],j,a)
break
insertion(ele_loc,obj_loc,array):
set temp=array[ele_loc];
for i=ele_loc to (obj_loc+1)
array[i]=array[i-1]
array[obj_loc]=temp;
複雜度分析:設第i個位置的元素插入前要進行k次比較,由於是原地排序,因此要挪動i-k個元素,故時間複雜度為i,總共有n個元素,則為o(n2)
程式**:#include#include#include "conio.h"
using namespace std;
vector& insertion(int ele_loc,int obj_loc,vector& array )
vector& insertionsort(vector& array)
}} return array;
}int t_main()
insertionsort(array1);
for(i=0;i改進的insertionsort函式如下:
vector& insertionsort(vector& array)
selectionsort(array1);
for(i=0;i
3、歸併排序
思想:4、快速排序
思想:5、堆排序
思想;
grep從檔案末尾開始找 c 開始之旅
1.這玩意怎麼學呢?學了很快就忘了,那四捨五入,不就等於沒學嗎?2.日常生活中這玩意有啥用呢?可不可以做些好玩的呢?或者高大上的。對於計算機型別的專業,大學中,基本上都會修c語言這門課程,但是c語言與c 還是有一點點區別。那麼可以通過看書去熟悉c 這門語言,然後通過一些日常的一些練習去熟悉學習的語法...
從排序開始(二) 希爾排序
希爾排序,是對直接插入排序的改進版本,又稱增量縮小排序,實質上是一種分組插入排序。基本思想是 先取第乙個增量step,以該序列內所有下標相差 step 的元素作為一組,如 array 0 array 0 step array 0 step 2 作為一組,array 1 array 1 step ar...
快速排序 從右邊開始
先給出快速排序的 void quicksort vector nums,int left,int right nums left nums i nums i temp quicksort nums,left,i 1 quicksort nums,i 1,right 以nums left 作為基數te...