//插入排序的stl版本。
#include "stdafx.h"
#include #include #include #include #include #include "1.h"
using namespace std;
int main(int argc,char** argv)
; insertionsort(a,a+10); //模板引數為具體型別的指標
copy(a,a+9,ostream_iterator(cout," "));
vectorva = vector(a,a+3);
insertionsort::iterator>(va.begin(),va.end());
cout<< endl;
copy(va.begin(),va.end(),ostream_iterator(cout," "));
cout*t=key; }}
利用插入排序的思想,可以解決逆序數的問題。
例如,給定序列a<2,3,8,6,1>求其逆序個數
答案為5個:<2,1> <3,1> <8,1> <6,1> <8,6>
插入排序:假定a[1:j-1]為有序的,排序a[j]的過程為,不斷的將a[j]與a[1:j-1]比較直到遇到小於a[j]的元素停止。
這之前的所有比較元素均大於a[j],根據逆序的定義可知,這個比較次數為逆序數
int main(int argc,char** argv)
; int i,j,n=sizeof(a)/sizeof(int),key;
int count = 0; //逆序個數
for(i=1;i=0;j--)
else
break;
} a[j+1] = key;
}cout << count;
return(0);
}
上述求逆序數的程式即為插入排序中加入乙個變數count 對於逆序陣列,,選擇排序 和 插入排序 那個更快?
插入排序 可以 更快。不是一定,看插入排序尋找插入位置時所採用的演算法 選擇排序需要從序列中找到當前最大或最小的值才能進行排序,因此每次都需要與子串行中的全部元素進行比較。插入排序無需比較子串行全部元素,在逆序情況下,只需要找到當前序列第乙個比自己大或小的元素,將自身插入到其前乙個位置即可。例如 4...
對於逆序陣列,,選擇排序 和 插入排序 那個更快?
插入排序 可以 更快。不是一定,看插入排序尋找插入位置時所採用的演算法 選擇排序需要從序列中找到當前最大或最小的值才能進行排序,因此每次都需要與子串行中的全部元素進行比較。插入排序無需比較子串行全部元素,在逆序情況下,只需要找到當前序列第乙個比自己大或小的元素,將自身插入到其前乙個位置即可。例如 4...
求逆序數 逆序數 歸併排序
求排列的逆序數 分治 一 題目描述 總時間限制 1000ms 記憶體限制 65536kb 描述 在internet上的搜尋引擎經常需要對資訊進行比較,比如可以通過某個人對一些事物的排名來估計他 或她 對各種不同資訊的興趣,從而實現個性化的服務。對於不同的排名結果可以用逆序來評價它們之間的差異。考慮1...