本文共 1082 字,大约阅读时间需要 3 分钟。
排序思想:
通过循环得到有序列:
实现代码如下:
#include#include //冒泡排序:让较大的往下沉,较小的数往上冒;//约定按照元素的大小升序排序// 时间复杂度: 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;}