#include <stdio.h>
#include<stdlib.h>
#include<time.h>
void swap(int *a, int i, int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void BubbleSort(int *a, int size)
{
int j, len = size-1;
while(len > 0)
{
int pos = 0;
for(j=0; j<len; j++)
{
if(a[j] > a[j+1])
{
swap(a, j, j+1);
pos = j;
}
}
len=pos;
}
}
void MaxHeapAdjust(int *a, int i, int size)
{
int left = 2*i+1;
int right = 2*i + 2;
int max = i;
if(i<size/2)
{
if(left < size && a[left] > a[max])
max = left;
if(right < size && a[right] > a[max])
max = right;
if(i != max)
{
swap(a, i, max);
MaxHeapAdjust(a, max, size);
}
}
}
void BuildMaxHeap(int *a, int size)
{
int i;
for(i=size/2-1; i>=0; i--)
MaxHeapAdjust(a, i, size);
}
void HeapSort(int *a, int size)
{
int i;
BuildMaxHeap(a, size);
for(i=0; i<size-1; i++)
{
swap(a, 0, size-1-i);
MaxHeapAdjust(a, 0, size-1-i);
}
}
int ArrayVerify(int *a1, int *a2, int size)
{
while(size-- > 0)
{
if(a1[size] != a2[size])
return 0;
}
printf("Verify OK !\n");
return 1;
}
void ArrayPrint(int *a, int size)
{
int i;
for(i=0; i<size; i++)
printf("%d, ", a[i]);
printf("\n");
}
#define SIZE (100)
int main()
{
int i, a[SIZE], b[SIZE];
srand((int)time(0));
for(i=0; i<SIZE; i++)
b[i] = a[i] = rand();
ArrayPrint(a, SIZE);
BubbleSort(a, SIZE);
HeapSort(b, SIZE);
ArrayVerify(a, b, SIZE);
ArrayPrint(a, SIZE);
return 0;
}
#include<stdlib.h>
#include<time.h>
void swap(int *a, int i, int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void BubbleSort(int *a, int size)
{
int j, len = size-1;
while(len > 0)
{
int pos = 0;
for(j=0; j<len; j++)
{
if(a[j] > a[j+1])
{
swap(a, j, j+1);
pos = j;
}
}
len=pos;
}
}
void MaxHeapAdjust(int *a, int i, int size)
{
int left = 2*i+1;
int right = 2*i + 2;
int max = i;
if(i<size/2)
{
if(left < size && a[left] > a[max])
max = left;
if(right < size && a[right] > a[max])
max = right;
if(i != max)
{
swap(a, i, max);
MaxHeapAdjust(a, max, size);
}
}
}
void BuildMaxHeap(int *a, int size)
{
int i;
for(i=size/2-1; i>=0; i--)
MaxHeapAdjust(a, i, size);
}
void HeapSort(int *a, int size)
{
int i;
BuildMaxHeap(a, size);
for(i=0; i<size-1; i++)
{
swap(a, 0, size-1-i);
MaxHeapAdjust(a, 0, size-1-i);
}
}
int ArrayVerify(int *a1, int *a2, int size)
{
while(size-- > 0)
{
if(a1[size] != a2[size])
return 0;
}
printf("Verify OK !\n");
return 1;
}
void ArrayPrint(int *a, int size)
{
int i;
for(i=0; i<size; i++)
printf("%d, ", a[i]);
printf("\n");
}
#define SIZE (100)
int main()
{
int i, a[SIZE], b[SIZE];
srand((int)time(0));
for(i=0; i<SIZE; i++)
b[i] = a[i] = rand();
ArrayPrint(a, SIZE);
BubbleSort(a, SIZE);
HeapSort(b, SIZE);
ArrayVerify(a, b, SIZE);
ArrayPrint(a, SIZE);
return 0;
}