#include<stdio.h>
#include<string.h>
#define OK 1
#define ERROR 0
int swap(int *a, int *b)//a,b值的交换
{
int temp = 0;
if(NULL == a || NULL == b)
{
return ERROR;
}
temp = *a;
*a = *b;
*b = temp;
return OK;
}
int output_array(int *Array, int array_length)//输出数组
{
int i = 0;
if(NULL == Array)
{
return ERROR;
}
for(i = 0; i < array_length; i++)
{
printf("%d ", Array[i]);
}
printf("\n");
return OK;
}
//冒泡排序
/*
两两比较相邻数字,如果左边的大于右边的数字,就交换。右边的最后一个数字就是数组中的最大数字。
剩下的数重复这样的比较
伪代码:
for(i = array_length - 1; i >= 1; i--)
{
for(j = 0; j < i; j++)
{
if(a[j] > a[j + 1])//比较相邻的数
{
swap(a[j], a[j + 1]);
}
}
}
*/
int Bubble_Sort(int *Array, int array_length)
{
int i = 0;
int j = 0;
if(NULL == Array)
{
printf("The Array is NULL\n");
return ERROR;
}
for(i = array_length - 1; i >= 1; i--)
{
for(j = 0;j < i; j++)
{
if(Array[j] > Array[j+1])//比较相邻的数
{
swap(&Array[j], &Array[j+1]);
}
}
}
return OK;
}
//选择排序 时间复杂度(N的平方)但是需要额外的空间复杂度
/*
进行一轮比较,得出最小值的数的下标,然后移动到最左边
剩下的数重复这样的比较。
伪代码:
for(i = 0; i < array_length - 1; i++)
{
min_number = i;//最小值的下标
for(j = i; j < array_length; j++)
{
if(array[min_number] > array[j])
{
min_number = j;
}
}
swap(array[i], array[min_number]);//将最小的数放到最前面
}
*/
int Select_Sort(int *Array, int array_length)
{
int i = 0, j = 0;
int min_number = 0;//数组中最小值的下标
if(NULL == Array)
{
printf("The Array is NULL\n");
return ERROR;
}
for(i = 0; i < array_length - 1; i++)
{
min_number = i;
for(j = i; j < array_length; j++)
{
if(Array[min_number] > Array[j])
{
min_number = j;
}
}
if(i != min_number)
{
swap(&Array[i], &Array[min_number]);//最小数与最前面的数进行交换
}
}
return OK;
}
//快速排序
/*
妈的!我工作快两年了连个快速排序都写不出来,真的是傻逼啊!超级大傻逼!
//左边的i_left一直往右边走直到遇到比key要大的值才停下来、右边的i_right向左边移找到比key小的值后停下来,然后两个交换
quick(a[], array_length)
{
int i_left = 1;
int j_right = array_length - 1;
int length_instead = 0;
int key = a[0];//把第一个值当作关键值
if(0 < array_length - 1)
{
while(i < j)
{
while((i < j) && (if(a[i] < key)))//如果比key大了就停下来
{
i++;
}
while((i < j) && (if(a[j] > key)))//如果比key值小了就停下来
{
j--:
}
if(i < j)
{
swap(&a[i], &a[j]);//交换a[i]及a[j]
}
}
if(a[i] < k)
{
swap(&a[i], &k);
i = i + 1;
}
else
{
swap(&a[i - 1], &k)
i = i - 1 + 1;
}
quick(a, i);
quick(a + i + 1, n - i -1);
}
}
*/
int Fast_Sort(int *Array, int array_length)
{
if(NULL == Array)
{
printf("The Array is NULL!\n");
return ERROR;
}
/*放弃了,我写不出来*/
}
int main(void)
{
int i = 0;
int a[10] = {2, 1, 10, 7, 9, 4, 6, 5, 3, 8};
(void)output_array(a, 10);
//(void)Select_Sort(a, 10);//选择排序
(void)Bubble_Sort(a, 10);//冒泡排序
(void)output_array(a, 10);
return 0;
}
选择排序&冒泡排序&快速排序
最新推荐文章于 2017-12-26 17:41:24 发布