几种简单排序

来源:互联网 发布:2017soda开放数据大赛 编辑:程序博客网 时间:2024/05/16 18:14
/***************  几种排序***************/#include <stdio.h>#include <stdlib.h>#include <time.h>#define LEN 5void arr_init(int num[], int len){int i;srand(time(NULL));for(i = 0; i < len; i++){num[i] = rand()%50;}}void arr_print(int num[], int len){int i;for(i = 0; i < len; i++){printf("%d ", num[i]);}printf("\n");}#if 0//选择排序void change_sort(int num[], int len){int i, j, tmp_min;int tmp;for(i = 0; i < len - 1; i++){tmp_min = i; //假定第一个参数为最小值(取下标)for(j = i + 1; j < len; j++){if(num[tmp_min] > num[j]){tmp_min = j; //找出当前数列第一个最小值,把下标记录在tmp_min里}}//看最小的数的下标是不是当前i,不是的话,交换数据if(tmp_min != i){tmp = num[i];num[i] = num[tmp_min];num[tmp_min] = tmp;}}}#endif#if 0//冒泡排序void maopao_sort(int num[], int len){int i, j, tmp;for(i = 0; i < len; i++){for(j = 0; j < len - i - 1; j++){if(num[j] > num[j + 1]){   //**注意是num[j] and num[j + 1]**tmp = num[j + 1];num[j + 1] = num[j];num[j] = tmp;}}}}#endif#if 0//插入排序void insert_sort(int num[], int len){int i, j, tmp;//将当前位置往后挪一位,并暂存到tmp,新数值与其比较,若小于,放到前面.for(i = 1; i < len; i++){tmp = num[i];for(j = i - 1; j >= 0 && num[j] > tmp; j--){num[j + 1] = num[j];}num[j + 1] = tmp;}}#endif#if 1//调用qsort 快速选择排序函数int comp_sort(const void *a, const void *b){return *(int *)a - *(int *)b;}#endifint main(void){int num[LEN];//char *p;arr_init(num, LEN);arr_print(num, LEN);//insert_sort(num, LEN);//maopao_sort(num, LEN);//change_sort(num, LEN);qsort(num, LEN, sizeof(int), comp_sort);arr_print(num, LEN);return 0;}/*akaedu@akaedu-G41MT-D3:~/lin/804_sf$ ./1.in 39 16 1 9 10 1 9 10 16 39 akaedu@akaedu-G41MT-D3:~/lin/804_sf$ ./1.in 37 45 16 5 30 5 16 30 37 45 akaedu@akaedu-G41MT-D3:~/lin/804_sf$ ./1.in 16 22 41 25 19 16 19 22 25 41 */

0 0