冒泡排序算法

本文详细介绍了C语言中的冒泡排序算法和标准库函数qsort的使用,包括冒泡排序的原理、代码实现以及qsort的函数结构和应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

本文将对冒泡排序和C语言库函数自带的数组排序进行一个简单的介绍


提示:以下是本篇文章正文内容,下面案例可供参考

一、冒泡排序的算法思想?

冒泡排序的核心是数组中相邻的两个数进行比较(按照升序),把最大的一个数在每一次比较后都放在数组的最后 ,实现数组的排列。

二、编写代码

代码如下(示例):

#include <stdio.h>
void Bubbling_sort(int arr[], int sz)
{
	//首先确定几趟
	int signel = 0;
	int i = 0;
	for (i = 0; i<sz-1; i++)
	{
		//一趟内排序
		int j = 0;
		for (j = 0; j<sz-1-i; j++)    
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
				signel = 1;
			}
		}
		if (signel == 0)
			break;
	}
}
int main()
{
	int arr[10] = {0};
	int sz = sizeof(arr) / sizeof(arr[0]);
	for(int i = 0; i<sz;i++)
	{
		scanf("%d",&arr[i]);
	}
	Bubbling_sort(arr, sz);
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
}

2、代码解析
(1)首先创建一个数组并在数组中存放数据
(2)编写一个冒泡排序函数 函数参数为数组首元素地址 及数组长度
(3)冒泡排序的核心思想就是首先确定要走几趟 ,只有每一次把最后一个数排在最后,那么9趟之后 ,排序就结束了 ;其次 ,一趟 ,用相邻数组两两对比的方式,把大的那个数一直往后挪,最后完成一趟的流程。完成一趟后,就会少比较最后那一个数。
(4)可以优化的地方就在于假设有一趟没有发生任何交换,说明数组已经是有序的了,这时候设置signel 就可以优化算法。

三、用C语言库函数中的qsort也可以实现快速排序

1、qsort简介

(1)函数介绍

需要引头文件 <stdlib.h>
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );

(2)函数讲解

qsort函数是不需要返回值的;
void*base 是数组的首元素地址;
size_t num 是数组长度;
size_t width 是数组中每个元素在内存中占用的字节大小;
int (*compare)是函数指针,需要创建一个函数进行两个数大小的比较,返回类型为整形,返回如果是小于0,说明后面元素大于前面元素 ,大于0则相反。(函数默认是升序排列);

2、代码

#include<stdio.h>
#include<stdlib.h>
int int_com(const void* e1, const void* e2)
{
	return *(int*)e1 - *(int*)e2;
}
int main()
{
	int arr[10] = {0};
	int sz = sizeof(arr)/sizeof(arr[0]);
	for(int i = 0; i<sz;i++)
	{
		printf("%d", &arr[i]);
	}
	
	qsort(arr, sz, 4,  int_com);
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

四、输出

1、冒泡排序的输出

冒泡排序的输出

2、qsort库函数的输出

升序
降序(将e2和e1交换位置即可)

五、总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了冒泡排序和C语言库函数提供的qsort数组排序函数。如有不正,请各位大佬多多指教。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值