当前位置:   article > 正文

c语言----冒泡排序(详解)_c语言冒泡排序代码详解

c语言冒泡排序代码详解

一、冒泡排序的思想

两两相邻的元素进行比较,并且有可能的话需要交换

二、冒泡排序的3种方法

2.1第一种以10个数为例

升序

	#include<stdio.h>
int main()
{
	int arr[10] = { 0 };
	int m = 0;
	for (m = 0; m < 10; m++)
	{
		scanf("%d", &arr[m]);//输入10个数放进数组里面去

	}
	for (m = 1; m < =10; m++)//冒泡排序进行的趟数
	{
		int j = 0;
		for (j = 0; j < 10-m; j++)//一趟冒泡排序要进行多少对元素的比较
		{
			int temp = 0;
				if (arr[j] > arr[j + 1])
				{
					temp = arr[j + 1];
					arr[j + 1] = arr[j];
					arr[j] = temp;
				}
		}
	}
	for (m = 0; m < 10; m++)//打印冒泡排序排序好之后的数组
	{
		printf("%d ", arr[m]);
	}
	return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

运行结果:
在这里插入图片描述

2.2 第二种在第一种的情况下进行优化升级

升序

#include<stdio.h>
int main()
{
	int arr[10] = { 0 };
	int sz = 0;
	sz = sizeof(arr) / sizeof(arr[10]);//表示数组的元素个数
	int m = 0;
	for (m = 0; m < sz; m++)
	{
		scanf("%d", &arr[m]);
	}
	for (m = 1; m <=sz; m++)//冒泡排序进行的趟数
	{
		int j = 0;
		int flag = 1;//假设待排序的数组中的元素已经有序
		for (j = 0; j < sz-m; j++)//对未排序元素进⾏冒泡排序
		{
				int temp = 0;
				if (arr[j] > arr[j + 1])
				{
					flag = 0;//只要交换说明正在排序的数据不是有序的
					temp = arr[j + 1];
					arr[j + 1] = arr[j];
					arr[j] = temp;
				}
		}
		if (flag == 1)//当前序列已经是升序状态,结束循环
		{
			break;
		}
	}
	for (m = 0; m < sz; m++)
	{
		printf("%d ", arr[m]);

	}
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

运行结果:
在这里插入图片描述
在这里插入图片描述

2.3第三种qsort 函数进行冒泡排序

qsort() 函数的声明:

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
  • 1

参数:
base – 指向要排序的数组的第一个元素的指针。
nitems – 由 base 指向的数组中元素的个数。
size – 数组中每个元素的大小,以字节为单位。
compar – 用来比较两个元素的函数。
头文件:stdlib.h

#include<stdio.h>
#include<stdlib.h>
int cmp_int(const void* e1, const void* e2)
{
	return *(int*)e1 - *(int*)e2;
}
int main()
{
	int arr[10] = { 0 };
	int sz = 0;
	sz = sizeof(arr) / sizeof(arr[10]);//表示数组的元素个数
	int m = 0;
	for (m = 0; m < sz; m++)
	{
		scanf("%d", &arr[m]);
	}
	qsort(arr,sz,4, cmp_int);
	for (m = 0; m < sz; m++)
	{
		printf("%d ", arr[m]);

	}
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

在这里插入图片描述

运行结果:
在这里插入图片描述
如果这个想让他降序排序可以将下面这行代码中的两个交换位置:
在这里插入图片描述

在这里插入图片描述
欧耶!!!!我学会啦!!!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/805998
推荐阅读
相关标签
  

闽ICP备14008679号