几种简单排序

/***************
  几种排序
***************/

#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 
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值