Insertion Sort
Insertion Sort
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void insertionSort(int a[], int n, int *comps, int *shifts, int *c, int *s) {
(*c)=0;
(*s)=0;
for (int i=1; i<n; i++) {
(*comps) = 0;
(*shifts) = 0;
int key = a[i];
int j = i-1;
while (j >=0 && key < a[j]) {
(*comps)++;
(*c)++;
(*shifts)++;
(*s)++;
a[j+1] = a[j];
j--;
}
(*comps)++; /dừng while nghĩa là them 1 lần so sánh/
(*c)++;
a[j+1] = key;
printf("Vong %d: ", i);
for(int k=0; k<n; k++) {
printf("%d ", a[k]);
}
printf("\n");
printf("Comps = %d ; Shifts = %d\n\n", *comps, *shifts);
}
}
int main() {
time_t t;
srand((unsigned) time(&t));
int a[10];
int n=10;
int comps, shifts, c,s;
initializeA(a,n,-100,100);
for(int k=0; k<n; k++) {
printf("%d ", a[k]);
}
printf("\n");
insertionSort(a,n,&comps,&shifts,&c,&s);
printf("Total Comps = %d ; Shifts = %d\n", c,s);
return -1;
}
**********BẢNG*************
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
time_t t;
srand((unsigned) time(&t));
int a[10];
int n=10;
int c,s;
int k[5] = {10,20,100,1000,10000};
for(int i=0; i<5; i++) {
printf("n = %d\n", k[i]);
int fre_c[200] = {0};
int fre_s[200] = {0};
for (int j= 0; j<k[i]; j++) {
initializeA(a,n,-100,100);
insertionSort(a,n,&c,&s);
fre_c[c]++;
fre_s[s]++;
}
float a1 = ave(fre_c, n*n, k[i]);
float a2 = ave(fre_s, n*n, k[i]);
printf(" Comps Shifts\n");
for (int k=0; k<n*n; k++) {
if (fre_c[k] > 0 || fre_s[k] > 0) {
printf("%d %d %d\n", k, fre_c[k], fre_s[k]);
}
}
printf("Average: %.3f %.3f\n", a1, a2);
}
return -1;
}