一、排序思想
1、排序:排列顺序,把一组数据元素的任意序列重新排列成一组按关键字排列的有序序列。
2、排序的分类:
(1)存储位置:内部排序 数据在内存中排序,数据量较小。
外部排序 部分排序,数据量太大。
(2)排序算法(逻辑): 插入排序、选择排序、交换排序、归并排序、计数排序。
(3)排序结果:升序、降序。
3、排序整体思想:
时间复杂度:某个算法的执行次数。
空间复杂度:临时存储位的个数。
稳定性:重复数据在排序前后位置不发生变化则为稳定。
二、直接插入排序法
1、待排序数字、已排序、未排序
2、时间复杂度:O(N^2) 空间复杂度:O(1)
3、思想:把一个数组先划分为已排序好的未排序的部分,从未排序部分获取一个关键字作为待排序数,从已排序部分找到合适位置
插入这个数据。
4、代码如下:
#include<stdio.h>
//有哨兵位 第一位
void insertSort(int arr[], int len)
{
int i, j;
for (i = 2; i < len; ++i)
{
arr[0]=arr[i];
for (j = i - 1; arr[j] > arr[0]; --j)
{
arr[j + 1] = arr[j];
}
arr[j + 1] = arr[0];
}
}
//无哨兵位,直接排序
void insertSort(int arr[], int len)
{
int i, j;
int tmp;
for (i = 1; i < len; ++i)
{
tmp=arr[i];
for (j = i - 1; arr[j] > tmp; --j)
{
arr[j + 1] = arr[j];
}
arr[j + 1] = tmp;
}
}
int main( )
{
int arr[] = {-1,55,1,3,11,5,8,6,25,7};
int len = sizeof(arr) / sizeof(arr[0]);
insertSort(arr, len);
for (int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
{
printf("%d ",arr[i]);
}
return 0;
}