/************************************************************************/
/* insert sort algorithm */
/* pbImage 27/08/2013 */
/************************************************************************/
#include <iostream>
#include <vector>
using namespace std;
void InsertionSort(vector<int> &data)
{
int i = 0, key = 0;
for (int j = 1; j < data.size(); j++)
{
key = data[j];
i = j - 1;
while( i >= 0 && data[i] > key)
{
data[i + 1] = data[i];
i = i - 1;
}
data[i + 1] = key;
}
return;
}
int main()
{
int data[10] = {11, 2, 5, 21, 3, 90, 24, 8, 73, 10};
vector< int > test_data(10);
for (int i = 0; i < 10; i++)
{
test_data[i] = data[i];
}
cout<<"Before sort:"<<endl;
for (int i = 0; i < 10; i++)
{
cout<<test_data[i]<<'\t';
}
cout<<endl;
InsertionSort(test_data);
cout<<"After sort:"<<endl;
for (int i = 0; i < 10; i++)
{
cout<<test_data[i]<<'\t';
}
cout<<endl;
return 0;
}
/*選擇排序*/
void SelectionSort(vector<int> &data)
{
for (int i = 0; i < data.size() - 1; i++)
{
int min_val = data[i];
int min_id = i;
for (int k = i + 1; k < data.size(); k++)
{
if (data[k] < min_val)
{
min_val = data[k];
min_id = k;
}
}
if (min_id != i)
{
min_val = data[i];
data[i] = data[min_id];
data[min_id] = min_val;
}
}
return;
}
循環不變式的三大性質:
1. 初始化:在循環的第一輪迭代開始之前,正確;
2. 保 持:在某次迭代開始前若正確,那麼下一次迭代之前,也正確;
3. 終 止:循環結束時,不變式給我們一個有用的性質,去判定算法是否正確。