二哥學演算法之排序

2021-06-29 03:06:37 字數 1146 閱讀 7163

這次為大家介紹幾個通過交換元素位置排序的程式,言外之意肯定也有不通過交換元素位置排序的程式。

從最簡單最基本的氣泡排序開始:

氣泡排序:這裡引用一下wiki上面的解釋:它通過重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把交換他們的位置,走訪數列的工作是重複地進行直到沒有再需要交換,這時也就標誌著數列已經排序完成!演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。

有了思路,下面就用用**實現一下:

#include 

#include

#include

template

void bubble_sort(typename

std::vector

& it,int n)

}}template

void print(typename

std::vector

it)}int main(void);

int size=it.size();

bubble_sort(it,size);

print(it);

return

0; }

ok,到這裡**就結束了。但是大家要知道這種排序的時間複雜度約為上面提到,當沒有元素交換時就代表 排序已經完成了;因此我們可以在排序語句塊內新增乙個檢測是否有元素發生交換的label。

————————————————————————————

下面為大家介紹插入排序:

先介紹一下基本思想,來自wiki:插入排序(insertion sort)它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。

#include 

using

namespace

std;

#define n 10

int main(void);

int temp=0,j;

for(int i=0;iarray[i];

for(j=i;j-1>=0&&array[j-1]>temp;j--)

array[j]=temp;

}for(int m=0;mcout

<

0;}

1008 二哥買期貨

對起始年份和結束年份,可以對每一天單獨判斷 對中間的每個整年,週末總的天數分為兩部分 1.每個整年恰有完整的52個周,所以至少有 2 52 天是週末 2.閏年時,366 7 2,需要判斷12 31和12 30是否為週末即可,平年需要判斷12 31是否為週末 對中間的每個整年,都有11天假日,注意週末...

1003 二哥養細菌

類似bfs擴充套件的思想 將第一代細菌位置入佇列 佇列中細菌到上下左右沒有細菌的位置進行繁殖 更改這些位置的標記 0 1 繁殖出的新一代細菌入棧 如果棧空,結束,否則佇列清空,棧中的新一代細菌入佇列 如果棧空,說明培養皿已經充滿了 題目保證最終能夠充滿培養皿 複雜度o n 1 include 2 3...

1038 二哥的約瑟夫

話說二哥當年學習資料結構的時候遇到了那道猴子報數的題目,其實這就是經典的約瑟夫問題。可是當年的二哥還是個毛頭小子,只會用模擬的方法,而其他同學卻使用了一些令二哥完全摸不到頭腦的方法。二哥一怒之下改了題目 話說當年花果山的猴子要選大王,選舉辦法如下 所有猴子按1 m編號圍坐一圈,二哥站在圈中心,由二哥...