每个程序员都了解算法的重要性,不去看书,对于算法的概念永远都是似懂非懂,而不动手实践则永远不会有深刻的认识。新手上路,求各路神仙指点…….
今天从最简单的算法做起,插入排序,刚开始写的方法如下:
void Sort_Methods::InsertSort(int *arr, int num)
{
//i <- 1 to num – 1
for(int i = 1; i < num; ++i)
{
int key = arr[i];
int j = i – 1;
while( j >= 0 )
{
//升序排列
if( key < arr[j] )
{
//向后移动一位
arr[j+1] = arr[j];
arr[j] = key;
j = j – 1;
}
else
{
break;
}
}
}
}
功能虽然实现了,但是在每次比较之后,都要交换数据,与最初的设计(比较后移位,只赋值一次key的值)不符,经过修改后,代码如下:
void Sort_Methods::InsertSort(int *arr, int num)
{
//i <- 1 to num – 1
for(int i = 1; i < num; ++i)
{
int key = arr[i];
int j = i – 1;
while( key < arr[j] && j >= 0)
{
arr[j+1] = arr[j];
j = j – 1;
}
arr[j+1] = key;
}
}
最坏情况下运行时间为 a*n2+b*n+c
虽然很基础,但是还是要用心去做,写程序前要先记下思路,这样才能做好全局掌控