#include <stdio.h>
#include <stdlib.h>
#define SORT_ASCENDING (1)
#if SORT_ASCENDING
#define compare_num(a,b) ((a) > (b))
#else
#define compare_num(a,b) ((a) < (b))
#endif
#define NUM (10)
//======================================================================================
int print_num(int data[])
{
int n;
for (n = 0; n < NUM; n++)
{
printf("%d ", data[n]);
}
printf("/n");
return 0;
}
int generate_num(int data[])
{
int n;
for (n = 0; n < NUM; n++)
{
data[n] = (rand() - rand()) % 100;
}
print_num(data);
return 0;
}
//======================================================================================
#define swap_num(n, i, j) do { n[i] ^= n[j]; n[j] ^= n[i]; n[i] ^= n[j]; } while (0);
/*
* bubble sort
*/
int bubble_sort(int data[], int num)
{
int i, j;
printf("%s=> ", __FUNCTION__);
for (i = 0; i < num; i++)
{
for (j = i + 1; j < num; j++)
{
if (compare_num(data[i], data[j]))
{
swap_num(data, i, j);
}
}
}
print_num(data);
return 0;
}
/*
* select sort
*/
int select_sort(int data[], int num)
{
int i, j, x;
printf("%s=> ", __FUNCTION__);
for (i = 0; i < (num - 1); i++)
{
x = i;
for (j = i + 1; j < num; j++)
{
if (compare_num(data[j], data[x]))
{
x = j;
}
}
if (x != i)
{
swap_num(data, i, x);
}
}
print_num(data);
return 0;
}
/*
* insert sort
*/
int insert_sort(int data[], int num)
{
int i, j;
printf("%s=> ", __FUNCTION__);
for (i = 1; i < num; i++)
{
for (j = 0; j < i; j++)
{
if (compare_num(data[j], data[i]))
{
swap_num(data, i, j);
}
}
}
print_num(data);
return 0;
}
/*
* quick sort
*/
int _quick_sort(int data[], int low, int high)
{
int i, j, x;
if (low < high)
{
i = low;
j = high;
x = data[i];
while (i < j)
{
while ((i < j) && compare_num(data[j], x))
{
j--;
}
if (i < j)
{
data[i] = data[j];
i++;
}
while ((i < j) && compare_num(x, data[i]))
{
i++;
}
if (i < j)
{
data[j] = data[i];
j--;
}
}
data[i] = x;
_quick_sort(data, low, i - 1);
_quick_sort(data, i + 1, high);
}
return 0;
}
int quick_sort(int data[], int num)
{
printf("%s=> ", __FUNCTION__);
_quick_sort(data, 0, num - 1);
print_num(data);
return 0;
}
//======================================================================================
int main()
{
int data[NUM];
generate_num(data);
bubble_sort(data, NUM);
generate_num(data);
select_sort(data, NUM);
generate_num(data);
insert_sort(data, NUM);
generate_num(data);
quick_sort(data, NUM);
return 0;
}
几种排序方法的C语言实现
最新推荐文章于 2022-04-29 21:05:27 发布