// 判断
int sort_judgeWithMode(int* arr, int i, int j, int mode)
{
return mode? arr[j]<arr[i]:arr[j]>arr[i];
}
// 直接插入排序
/*
mode: 非0:升序, 0:降序
*/
void sort_straightInsertionSort(int* arr, int len, int mode)
{
int tmp;
for(int i = 1; i < len; i ++)
{
for(int j = i-1; j >= -1; j --)
{
/*
如果有匹配成功的数,插入即可
如果没有匹配成功的数,那这个数就需要插入在最前面,此时j=-1
并且插入方法与匹配成功一致
*/
if(j == -1 || sort_judgeWithMode(arr, i, j, mode))
{
tmp = arr[i];
// 移动需要移动的元素
for(int k = i; k > j; k--)
{
arr[k] = arr[k-1];
}
arr[j+1] = tmp;
break;
}
}
}
}
运行结果
测试代码
#define N 10
int main()
{
int arr[N] = {1,3,543,234,65,23,4,23,234,87};
printf("\n降序排列结果:");
sort_straightInsertionSort(arr, N, 0);
for(int i = 0; i < N; i ++) printf("%3d ", arr[i]);
printf("\n\n升序排列结果:");
sort_straightInsertionSort(arr, N, 1);
for(int i = 0; i < N; i ++) printf("%3d ", arr[i]);
return 0;
}