排序算法之冒泡排序(C语言实现)

排序思想:

通过循环得到有序列:

实现代码如下:

#include<stdio.h>
#include<windows.h>

//冒泡排序:让较大的往下沉,较小的数往上冒;
//约定按照元素的大小升序排序
// 时间复杂度: O(N ^ 2)
// 空间复杂度: O(1)
// 稳定性: 稳定排序
/************************************************************************************
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个(从后往前找)。

2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

3.针对所有的元素重复以上的步骤,除了最后一个。

4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
************************************************************************************/
void swap(int *x, int *y)
{
	int tmp = *x;
	*x = *y;
	*y = tmp;
	return ;
}
void BubbleSort(int *arr, int size)
{
	if (size <=1){
		return;
	}
	int bound= 0;
	// 采用每次循环找到一个最小的数字的方式完成冒泡
	// [0, bound) 就是当前的有序区间
	// [bound, size) 就是待排序区间

	for (bound; bound < size; bound++){
		int cur = size - 1;
		for (cur; cur > bound; cur--){
			if (arr[cur] < arr[cur - 1]){
				// 此处交换两个元素
				swap(&arr[cur], &arr[cur - 1]);
			}
		}
	}

}
int main()
{
	int arr[9] = { 49, 38, 65, 97, 76, 13, 27, 43, 12 };
	int size = sizeof(arr) / sizeof(arr[0]);
	BubbleSort(arr, size);
	
	int i = 0;
	for (i = 0; i < size; i++){
		printf("%d  ", arr[i]);
	}
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/snowyuuu/article/details/81482858