當前位置:成語大全網 - 書法字典 - 向量字典排序

向量字典排序

我在算法中使用了random_shuffle函數,它是隨機排序的。我的想法是使用另壹個向量取出不固定的元素進行隨機排序,然後恢復固定的元素以獲得重新排列的向量:

# include & ltiostream & gt

# include & lt算法& gt

# include & ltvector & gt

使用命名空間std

int I = 0;

模板& lt鍵入名稱T & gt

無效打印(矢量& ltT & gt數字)

{

用於(測試編號:數字)

cout & lt& lt號碼& lt& lt",";//為方便起見,刪除結尾後的最後壹個逗號。

cout & lt& ltendl

}

模板& lt鍵入名稱T & gt

void shuffleo(vector & lt;T & gt& ampnumbers,int index)//shuffle不包括1

{

int count = numbers . size();// vector.size(),返回向量元素的個數。

if(index & gt;= count)返回;?

向量& ltT & gttemp

for(I = 0;我& lt指數;i++)?

temp . push _ back(numbers . at(I));// vector.push_back(),在向量的末尾添加壹個元素。

for(I = index+1;我& lt數數;i++)

temp . push _ back(numbers . at(I));?//這裏的兩個for將原數組中除index以外的元素復制到temp中,並保持順序不變。

random _ shuffle(temp . begin()、temp . end());// random_shuffle()是算法中的標準庫函數,它有兩個重載版本,壹個有兩個參數,壹個有三個參數。雙參數版本接收兩個叠代器指針作為參數,前者指向序列的開頭,後者指向序列的結尾,random_shuffle將隨機重新排列兩個指針之間的元素。三參數版本接收壹個指定重排規則的額外參數,這不是很常見。這裏的vector.begin()指向vector的第壹個元素,vector.end()指向最後壹個元素之後的位置(註意不是最後壹個元素)。

向量& ltT & gttemp2

for(I = 0;我& lt指數;i++)

temp 2 . push _ back(temp . at(I);//首先將index之前的元素添加到temp2。

temp 2 . push _ back(numbers . at(index));//向temp2添加索引。

for(I = index;我& ltcount-1;i++)

temp 2 . push _ back(temp . at(I);//最後,將index之後的元素添加到temp2中。

numbers = temp2//這樣,索引位置保持不變,而其他元素已被隨機排序,temp2是最終結果。因為數字是通過引用傳遞的,所以這裏將temp2賦給數字。

}

int main(void)

{

向量& ltint & gt測試;

for(I = 0;我& lt10;i++)test . push _ back(I);

打印(測試);

cout & lt& lt“現在洗牌指數0:“& lt;& ltendl

for(int j = 0;j & lt15;j++)

{

舒芙蕾奧(測試,0);

打印(測試);

}

cout & lt& lt“現在洗牌指數4:“& lt;& ltendl

test . clear();// vector.clear()清空vector中的元素,相當於成為壹個空vector。

for(I = 0;我& lt10;i++)test . push _ back(I);

打印(測試);

for(int j = 0;j & lt15;j++)

{

舒芙蕾奧(測試,4);

打印(測試);

}

返回0;

}

輸出結果: