從排序開始 演算法之旅

2021-06-28 13:41:02 字數 1118 閱讀 4888

每次說到排序,都會想起剛學習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...