1. 插入排序
就跟打扑克牌一样
具体算法描述如下:
1.从第一个元素开始,该元素可以认为已经被排序
2.取出下一个元素,在已经排序的元素序列中从后向前扫描
3.如果该元素(已排序)大于新元素,将该元素移到下一位置
4.重复步骤 3,直到找到已排序的元素小于或者等于新元素的位置
5.将新元素插入到该位置后
6.重复步骤 2~5
代码
int main()
{
int i, n;
int num[10];
while(scanf("%d", &n) != EOF)
{
//接收无序数据
for(i = 0; i < n; i ++)
{
scanf("%d",num + i);
}
//快速排序
insertSort(num, n);
//打印输出
for(i = 0; i < n; i ++)
{
printf("%d ",num[i]);
}
printf("\n");
}
return 0;
}
void insertSort(int *array, int len)
{
int i, j, temp;
for(i = 1; i < len; i ++)
{
temp = array[i];
for(j = i - 1; j >= 0; j --)
{
if(array[j] > temp)
{
array[j + 1] = array[j];
}else
{
break;
}
}
array[j + 1] = temp;
}
}
时间复杂度
当数组和要求排序的顺序相同时,为o(n)
当数组和要求排序的顺序相反时,为o(n * n)
平均时间复杂度为o(n * n)
网友评论