选择排序&冒泡排序&快速排序

来源:互联网 发布:js数组lenght属性 编辑:程序博客网 时间:2024/06/04 19:41
#include<stdio.h>#include<string.h>#define OK    1#define ERROR 0int 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;}

0 0
原创粉丝点击