C语言:冒泡排序

冒泡排序:两两相邻的元素比较,不满足顺序,便交换两个元素(由升降序判断)
如:1 2 3 4 5 6 7 排成降序
第一趟:  ①1与2比,不满足,则交换变成 2 1 3 4 5 6 7 
                ②1与3比,不满足,则交换变成 2 3 1 4 5 6 7 
                 ......
                第一躺冒泡排序后,变为 2 3 4 5 6 7 1

     【进行多次比较交换后,数字放到了它应该出现的位置】
             

 以此类推,第二趟冒泡排序后,变成 3 4 5 6 7 2 1

                   第三趟冒泡排序后,变成 4 5 6 7 3 2 1

                   ......

                   第六趟冒泡排序后,变成 7 6 5 4 3 2 1

 n个元素要进行(n-1)趟冒泡排序

 例如:输入人数n,再依次输入n个同学的成绩。

            输出n个同学成绩中成绩最好的前五名。

​
int main()                     
{                              
	                            
	int n = 0;                
	int arr[40] = { 0 };      
	scanf("%d", &n);        
	int i = 0;                 
	for (i = 0; i < n; i++)    
	{                          
		scanf("%d", &arr[i]);
	}                        
	//冒泡排序                                                             
	for (i = 0; i < n - 1; i++)  //循环一次进行一趟冒泡排序                  
	{                                                                   
			int j = 0;                                                 
			                                                             
		for (j = 0; j < n - 1 - i; j++)  //在一趟冒泡排序中循环进行比较交换                
		{                                      
			if (arr[j] < arr[j + 1])  //比大小,并交换顺序                 
			{                                                            
				int tmp = arr[j];                                      
				arr[j] = arr[j + 1];                                     
				arr[j + 1] = tmp;                                        
			}
		}
	}
	for (i = 0; i < 5; i++) //循环打印出数组元素排序后的前五个
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

​

拓展:也可以用库函数实现自动排序

           qsort(arr , n , 4 , cmp_int);

           qsort(要比较的数组,数组的大小,元素大小(占4四个字节),自定义的函数名)

int cmp_int(void* e1, const void* e2)
{
	return(*(int*)e2 - *(int*)e1);  // (int*)进行强制类型转换
}
int main()                     
{                              
							    
	int n = 0;                 
	int arr[40] = { 0 };      
	scanf("%d", &n);          
	int i = 0;                
	for (i = 0; i < n; i++)    
	{                          
		scanf("%d", &arr[i]);
	}                                                      
	qsort(arr,n,4,cmp_int);  //自动排序函数
	for (i = 0; i < 5; i++)  //循环打印出数组元素排序后的前五个
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值