#include
#include
/*函数声明部分*/
void __quick_sort(int par_array[], int low, int high);
void bubble_sort(int par_array[], int array_size);
void quick_sort(int par_arrayp[], int array_size);
void print_array(int par_array[], int array_size);
/*函数定义部分*/
void print_array(int par_array[], int array_size)
{
int i;
for(i = 0; i < array_size; ++i)
printf("%d/t", par_array[i]);
printf("/n");
}
/*
* 冒泡排序
*/
void bubble_sort(int par_array[], int array_size)
{
int i,j;
int temp;
for (i = 0; i < array_size-1; ++i)/*进行n-1次冒泡*/
{
for (j = array_size-1; j > i; --j)
{
if (par_array[j] < par_array[j-1])
{
/*交换*/
temp = par_array[j];
par_array[j] = par_array[j-1];
par_array[j-1] = temp;
}
}
}
}
/*
* 快速排序
* 从右到左划分整个待排序集合,最后采用分而治之的方法解决问题
* 重要的是理解划分过程
* 其实是分而治之的思想
*/
void __quick_sort(int par_array[], int low, int high)
{
int i,j;
int pivot;
if(low >= high)
return ;
i = low;
j = high;
pivot = par_array[i];
while (i < j)
{
while (i < j && par_array[j] >= pivot)
j--;
if(i < j)
par_array[i++] = par_array[j];
while (i < j && par_array[i] < pivot)
i++;
if(i < j)
par_array[j--] = par_array[i];
}
par_array[i] = pivot;
__quick_sort(par_array, low, i-1);
__quick_sort(par_array, i+1, high);
}
/*
* 封装成统一接口
*/
void quick_sort(int par_arrayp[], int array_size)
{
__quick_sort(par_arrayp, 0, array_size-1);
}
int main()
{
int i_array[] = {7,3,5,8,9,1,2,4,6};
int array_size = sizeof(i_array)/sizeof(int);
int i_array2[] = {7,3,5,8,9,1,2,4,6};
int array_size2 = sizeof(i_array2)/sizeof(int);
printf("Before bubble_sort:/n");
print_array(i_array, array_size);
bubble_sort(i_array, array_size);
printf("After bubble_sort/n");
print_array(i_array, array_size);
printf("Before quick_sort:/n");
print_array(i_array2, array_size2);
quick_sort(i_array2, array_size2);
printf("After quick_sort/n");
print_array(i_array2, array_size2);
system("pause");
}
/*
Before bubble_sort:
7 3 5 8 9 1 2 4 6
After bubble_sort
1 2 3 4 5 6 7 8 9
Before quick_sort:
7 3 5 8 9 1 2 4 6
After quick_sort
1 2 3 4 5 6 7 8 9
请按任意键继续. . .
*/