闲来无事,看了下算法导论,发现还是有写点东西的必要,因为这本书解答不太详细,所以我决定将自己学习的东西贴上来,希望能够共同学习,各位大牛能够多多指教。
下面是算法导论第二章1-1的习题源码,插入排序。
问题描述:
用插入排序说明数组A=<51, 41, 59, 26, 41, 58>排序过程。
#include<iostream>
#include<time.h>
using namespace std;
typedef int Elem;
void Show(Elem *A, int n)
{
for (int i = 1; i <= n; i++)
{
cout << A[i] << " ";
}
cout << endl;
}
//插入排序
void INSERTION_SORT( Elem *A,int n)
{
int count = 0; //统计经过运行次数
Show(A, 6);
cout << endl;
Elem key;
int i = 1, j = 1;
//记录时间
clock_t start, finish;
double totaltime;
start = clock();
//插入排序算法核心块
/************************************************************************************/
for ( j = 2; j <= n; j++)
{
key = A[j];
i = j - 1;
while (i > 0 && A[i] > key)
{
count++;
A[i + 1] = A[i];
i = i - 1;
}
A[i + 1] = key;
Show(A, j);
}
/************************************************************************************/
//完成时间(秒)
finish = clock();
totaltime = (double)(finish - start) / CLOCKS_PER_SEC;
cout << endl <<"插入排序算法的运行次数为:"<< count << endl;
cout << "插入排序算法的运行时间(秒)为:" << totaltime << endl << endl;
}
void main()
{
Elem A[7] = { 0,51, 41, 59, 26, 41, 58 };
INSERTION_SORT(A,6);
}