重温排序算法(一)
最近闲着无聊,想到算法是个挺重要的事情,于是重温大学时学的数据结构。因此,把复习的算法执行了一遍,把算法也贴到这里,以备所需时查阅。
我准备要写的主要是内部排序,内部排序主要有插入排序(直接插入排序和希尔排序), 交换排序(冒泡排序和快速排序),选择排序(树型选择排序、堆排序、直接选择排序)以及归并排序和基数排序。我准备把这些算法都用C实现一下,今天主要是插入排序。
- 首先是最简单的插入排序int _tmain(int argc, _TCHAR* argv[])
{
int a[7] = {0, 49, 38, 65, 97, 76, 12};
int j;
for(int i = 2; i <= 6; i++) //进行n-1趟排序
{
if(a[i] >= a[i-1])
{
continue;
}
a[0] = a[i]; //复制为哨兵
a[i] = a[i-1];
for( j = i - 2; a[j] > a[0] ; j--) //值若小,则前移,因为有哨兵的缘故,所以不必担心越界:)
{
a[j+1] = a[j];
}
a[j+1] = a[0];
}
for(int i = 1; i < 7; i++)
{
printf("%u ",a[i]);
}
scanf("%c");
}
从空间来看,它只需要一个记录的辅助空间,而时间复杂度为:0(n2)。
适用情况:1.元素个数较少 2 基本有序时