/***************
几种排序
***************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define LEN 5
void 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;
}
#endif
int 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
*/