#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <time.h>
typedef struct Arr
{
int* pBase;
int len;
}ARR, *PARR;
void generate_arr(PARR pArr, int maxSize, int maxVal);
void copy_arr(PARR pArr1, PARR pArr2);
bool traverse(PARR pArr);
void swap(int* arr, int i, int j);
void bubble_sort(PARR pArr1);
void insertion_sort(PARR pArr2);
bool compare(PARR pArr1, PARR pArr2);
int main()
{
ARR Arr1, Arr2;
int maxSize = 500;
int maxVal = 500;
int times = 500;
bool succeed = true;
for (int i = 0; i <= times; i++)
{
generate_arr(&Arr1, maxSize, maxVal);
copy_arr(&Arr1, &Arr2);
bubble_sort(&Arr1);
insertion_sort(&Arr2);
if (!compare(&Arr1, &Arr2))
{
succeed = false;
break;
}
free(Arr1.pBase);
free(Arr2.pBase);
}
if (succeed)
printf("成功!\n");
else
printf("失败!\n");
/*traverse(&Arr1);
printf("\n");
traverse(&Arr2);*/
/*traverse(&Arr1);
printf("\n");
traverse(&Arr2);
printf("\n");*/
/*traverse(&Arr1);
printf("\n");
traverse(&Arr2);*/
return 0;
}
void generate_arr(PARR pArr, int maxSize, int maxVal)
{
srand((unsigned)time(NULL));
pArr->len = rand() % (maxSize + 1);
pArr->pBase = (int*)malloc(sizeof(int) * pArr->len);
for (int i = 0; i <= pArr->len - 1; i++)
{
pArr->pBase[i] = rand() % (maxVal + 1);
}
return;
}
bool traverse(PARR pArr)
{
if (pArr->pBase == NULL)
return false;
else
{
for (int i = 0; i <= pArr->len - 1; i++)
{
printf("%d\t", pArr->pBase[i]);
}
return true;
}
}
void copy_arr(PARR pArr1, PARR pArr2)
{
pArr2->len = pArr1->len;
pArr2->pBase = (int*)malloc(sizeof(int) * pArr2->len);
for (int i = 0; i <= pArr2->len - 1; i++)
{
pArr2->pBase[i] = pArr1->pBase[i];
}
return;
}
void swap(int* arr, int i, int j)
{
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
return;
}
void bubble_sort(PARR pArr1)
{
if (pArr1->pBase == NULL || pArr1->len < 2)
return;
for (int i = pArr1->len - 1; i >= 0; i--)
{
for (int j = 0; j < pArr1->len - 1; j++)
{
if (pArr1->pBase[j] > pArr1->pBase[j + 1])
swap(pArr1->pBase, j, j + 1);
}
}
return;
}
void insertion_sort(PARR pArr2)
{
if (pArr2->pBase == NULL || pArr2->len < 2)
return;
for (int i = 1; i <= pArr2->len ; i++)
{
for (int j = i - 1; j > 0 && pArr2->pBase[j] < pArr2->pBase[j - 1]; j--)
{
swap(pArr2->pBase, j, j - 1);
}
}
return;
}
bool compare(PARR pArr1, PARR pArr2)
{
int i;
bool equ = true;
for ( i = 0; i <= pArr1->len - 1; i++)
{
if (pArr1->pBase[i] != pArr2->pBase[i])
{
equ = false;
break;
}
}
return equ;
}