根據插入排序演算法的原理,計算每個元素的移動次數。
例如:陣列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...
排序 插入排序的實現
插入排序類似於我們玩撲克牌,如果想要讓我們手中的牌有序,那麼當我們從牌堆中抽出一張牌放入自己手中的牌組內時,需要把這張牌和手中最大的牌開始向前比較,直到找到乙個大於前面的牌小於後面一張牌的情況下插入即可。在網上看到此 特別能說明插入排序的思想,因此把它放在這裡。插入排序的實現我們可以先從單趟排序入手...