排序思想:
通过循环得到有序列:
实现代码如下:
#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;
}