第二部分要求我们使用插入排序来排列数组,并把结果打印出来。
Sample Input
6 1 4 3 5 6 2
Sample Output
1 4 3 5 6 2
1 3 4 5 6 2
1 3 4 5 6 2
1 3 4 5 6 2
1 2 3 4 5 6
例子中是从前往后遍历元素并排序。插入排序的效率并不高,时间复杂度 $$\theta(n^2)$$
:::c
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <assert.h>
void printAr(int ar_size, int* ar){
int i;
for(i = 0; i < ar_size;i++){
printf("%d",ar[i]);
printf(" ");
}
printf("\n");
}
/* Head ends here */
void insertionSort(int ar_size, int * ar) {
int i,j,value;
for(i = 1; i < ar_size; i++){
j = i - 1;
value = ar[i];
while(j >= 0 && ar[j] > value){
ar[j + 1] = ar[j];
j--;
}
if(j != i - 1 )
ar[j + 1] = value;
printAr(ar_size, ar);
}
}
/* Tail starts here */
int main(void) {
int _ar_size;
scanf("%d", &_ar_size);
int _ar[_ar_size], _ar_i;
for(_ar_i = 0; _ar_i < _ar_size; _ar_i++) {
scanf("%d", &_ar[_ar_i]);
}
insertionSort(_ar_size, _ar);
return 0;
}