算法導論學習之sort

/************************************************************************/
/* 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. 終    止:循環結束時,不變式給我們一個有用的性質,去判定算法是否正確。

發佈了33 篇原創文章 · 獲贊 5 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章