冒泡排序(C语言)
冒泡排序:
算法思想: 以升序为例,将相邻的俩个数进行比较,如果左边数字大于右边数字,那么将这俩个数字进行交换;(降序则相反,如果左边数字小于右边数字则交换),一直到俩俩相邻的数字左边都小于右边为止(降序则相反)。
以升序为例:
代码实现:
#include <stdio.h>
//打印数组
void PrintArr(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
//冒泡排序
void BubbleSort(int arr[], int size){
int i, j;
for (i = 0; i < size-1; i++){ //要走的趟数
int isSorted = 1;
for (j = 0; j < size-1-i; j++){ //每走一趟就排除过走过的趟数(也就是排除过排序好的趟数)
if (arr[j] > arr[j+1]){ //俩数前者大于后者,进行交换,确保每次右边大于左边
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
isSorted = 0; //如果代码执行到了这里说明还是有乱序
}
}
if (isSorted == 1){ //如果运行带了这里,则说明排序就绪
break;
}
}
}
int main(){
int arr[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int size = sizeof(arr) / sizeof(int);
BubbleSort(arr, size);
PrintArr(arr, size);
printf("\n");
return 0;
}
输出效果: