*^-^* 冒泡排序 *^-^*

1. 问题分析

  • 把一个数组进行冒泡排序,顺序或者逆序(判断条件互逆);
  • 实例: { 1, 3, 5, 7, 9, 2, 4, 6, 8, 10 }-->{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  • 拓展方法:逐个固定元素,用固定元素与其他元素比较;

2. 代码

2.1 bubble_sort()顺序

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include <stdio.h>

void bubble_sort(int* arr, int len)
{
	int i, j;
	for (i = 0; i < len - 1; i++)
	{
		for (j = 0; j < len-1-i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
}

int main()
{
	int arr[10] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 10 };
	int len = sizeof(arr) / sizeof(arr[0]);
	bubble_sort(arr, len);
	for (int i = 0; i <10; i++)
		printf("%d ", arr[i]);
	return 0;
}

bubble_sort()要倒序的话,把 if 判断条件逆反一下即可。宗旨就是:顺序的时候,从左到右,轮番把大的值往后移;倒序的时候,从左到右,轮番把小值往后移。

2.2 类冒泡排序

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include <stdio.h>

void bubble_sort(int* arr, int len)
{
	int i, j;
	for (i = 0; i < len - 1; i++)
	{
		for (j = i + 1; j < len; j++)
		{
			if (arr[i] > arr[j])
			{
				int tmp = arr[i];
				arr[i] = arr[j];
				arr[j] = tmp;
			}
		}
	}
}

int main()
{
	int arr[10] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 10 };
	int len = sizeof(arr) / sizeof(arr[0]);
	bubble_sort(arr, len);
	for (int i = 0; i <10; i++)
		printf("%d ", arr[i]);
	return 0;
}

这个方法的思路就是,从左到右,依次固定一个元素,然后与后面的元素轮番进行比较即可。顺序和逆序也就是判断条件互逆一下即可。

3. 总结

感觉冒泡排序效率不是很高,应该还有其他高效的排序方法。等我学会了分享出来,哈哈哈。好像Python排序的话,一个库函数就OK了。快得很,哈哈 smile 各位路过的大佬们,期待你们指点其他高效的方法,可以给个方法思路就行,不一定要分享代码。有方法和思路,我应该就可以把代码搞出来的。一起变得更优秀呀,hackertalk的各位友友们 joy

visual-c++·c++·c
98 views
Comments
登录后评论
Sign In
·

你学了多久编程啊,是怎么学习的呢?

你的感觉是对的,冒泡排序的效率确实不高,时间复杂度是 math,更优的排序算法有快速排序和归并排序,这两者的平均时间复杂度能达到math,部分特殊情况下使用基数排序会更快。

基本上所有语言都会有排序的库,无非是语言的标准库提供或者第三方提供,使用的算法与基础算法不同,但确实是以基础算法为基础的,所以先从基础的排序学起没有任何问题。

C 的语法看起来你还是比较熟悉的,但学习方向我感觉有一点问题 joy

·

C语言有qsort在stdlib.h中,使用起来也挺方便的