插入排序中元素的移動次數

2021-07-05 08:56:39 字數 1121 閱讀 2742

根據插入排序演算法的原理,計算每個元素的移動次數。

例如:陣列a=

[2,1

,3,1

,2] ,那麼按從左往右的順序依次移動插入元素,他們的移動次數分別如下: sh

ift(

2)=0

,shi

ft(1

)=1,

shif

t(3)

=0,s

hift

(1)=

2,sh

ift(

2)=1

總共需要移動su

m=0+

1+0+

2+1=

4 次。

下面是題解**

hackerrank:

#include 

#include

#include

#include

#include

#include

using

namespace

std;

long

long mergesort(vector

& arr)

int m = arr.size()/2;

vector

v1(arr.begin(), arr.begin()+m);

vector

v2(arr.begin()+m, arr.end());

long

long res(0);

res += mergesort(v1);

res += mergesort(v2);

vector

::iterator ita, it1, it2;

ita = arr.begin();

it1 = v1.begin();

it2 = v2.begin();

while(it1!=v1.end() && it2!=v2.end())

else

}while(it1 != v1.end())

while(it2 != v2.end())

return res;

}int main()

cout

0;}

排序數列中元素出現次數問題

於 排序數列中元素出現次數問題 這裡採用折半法給出兩種思路 1 找到元素在陣列中的乙個索引位置,由於是陣列是有序排列,所有在這個位置左右移動,就可以找出其所有出現的位置 2 通過折半法找到元素的最大索引位置與最小索引位置,然後兩個索引位置相減再加一,就是元素的出現的次數。方法1中查詢元素位置的方法複...

C 陣列元素冒泡 選擇 插入排序

面試 陣列分割法反轉陣列元素 using documentformat.openxml.wordprocessing using system using system.collections.generic using system.text namespace knowledgepoint co...

排序 插入排序的實現

插入排序類似於我們玩撲克牌,如果想要讓我們手中的牌有序,那麼當我們從牌堆中抽出一張牌放入自己手中的牌組內時,需要把這張牌和手中最大的牌開始向前比較,直到找到乙個大於前面的牌小於後面一張牌的情況下插入即可。在網上看到此 特別能說明插入排序的思想,因此把它放在這裡。插入排序的實現我們可以先從單趟排序入手...