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了。快得很,哈哈 各位路过的大佬们,期待你们指点其他高效的方法,可以给个方法思路就行,不一定要分享代码。有方法和思路,我应该就可以把代码搞出来的。一起变得更优秀呀,hackertalk的各位友友们