笔记
对数组0~倒数第一个排序等价于:
对数组的0~倒数第二个元素,这部分排序
然后把是后一个元素插入到这个有序的部分中
AC
#include <stdio.h>
#include <malloc.h>
void InsertSort(int *&arr, int N) {
if (N == 0) //跳出条件
return;
InsertSort(arr, N - 1); //缩小问题规模
int x = arr[N]; //当前数组值
int index = N - 1; //前一个数组下标
while (index > -1 && x < arr[index]) {
arr[index + 1] = arr[index]; //往后挪位置
index--;
}
arr[index + 1] = x;
}
/*
void Insert(int *arr, int N) { // 法2
int t;
if (N == 0)
return;
Insert(arr, N - 1);
while (N > 0) {
if (arr[N] < arr[N - 1]) {
t = arr[N - 1];
arr[N - 1] = arr[N];
arr[N] = t;
}
N--;
}
return;
}
*/
//while (n > 0 && arr[n] < arr[n - 1])
//不能这个写,会造成短路
int main() {
int *arr, N;
scanf("%d", &N);
arr = (int *)malloc(sizeof(int) * N);
for (int i = 0; i < N; i++)
scanf("%d", &arr[i]);
InsertSort(arr, N - 1); // !!! N个数,N-1次挪动
for (int i = 0; i < N; i++)
printf("%d", arr[i]);
printf("\n");
}