我为插入排序编写了以下代码。我决定通过函数调用来编写代码,而不是传统方法。但我无法找到代码的复杂性。请帮我找出时间和空间的复杂性,以及与传统方法有多少不同。
#include <stdio.h>
void printArray(int ar_size, int * ar){
int j;
for(j=0; j<ar_size; j++)
printf("%d ", ar[j]);
printf("\n");
}
void insertion(int ar_size, int * ar, int p) {
int last = p, j;
int v = ar[last];
for(int i=last; i>=0; i--){
if(ar[i-1] > v){
ar[i] = ar[i-1];
}
else{
ar[i] = v;
break;
}
}
printArray(ar_size, ar);
}
void insertionSort(int ar_size, int * ar) {
int i;
for(i=1; i<ar_size; i++){
insertion(ar_size, ar, i);
}
}
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;
}
以下是插入排序的传统方法:
void InsertionSort(int a[], int n)
{
int i,j, temp;
for(i=0; i<=n-1; i++)
{
temp = a[i];
j = i;
while(a[j-1] > temp && j>=1)
{
a[j] = a[j-1];
j--;
}
a[j] = temp;
}
}