【算法】冒泡排序算法
冒泡排序算法
简介:冒泡排序是对数组进行排序的一种方式,常见的排序算法还有选择排序,插入排序、希尔排序、归并排序、堆排序等,这里介绍最简单的排序算法——冒泡排序。
思路
假设长度为n的数组arr,要按照从小到大排序。则冒泡排序的具体过程可以描述为:首先从数组的第一个元素开始到数组最后一个元素为止,对数组中相邻的两个元素进行比较,如果位于数组左端的元素大于数组右端的元素,则交换这两个元素在数组中的位置。这样操作后数组最右端的元素即为该数组中所有元素的最大值。接着对该数组除最右端的n-1个元素进行同样的操作,再接着对剩下的n-2个元素做同样的操作,直到整个数组有序排列。算法的时间复杂度为O(n^2)。
动画演示
代码
#include <stdio.h>
bubbleSort(int arr[], int length) { //这里函数用形参
for (int i = 0; i < length; i++) {
for (int j = 0; j < length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp;
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
}
main() {
int arr[10]= {1423,23456,3678,4789,590,628,724,4568,956,10};
int length;
length = sizeof(arr)/sizeof(arr[0]);
printf("排序前:") ;
for(int i=0; i<length; i++) { //输出原始数据用于比较
printf("%d\t",arr[i]);
}
printf("\n");
bubbleSort(arr,length);
printf("排序后:") ;
for(int i=0; i<length; i++) { //输出排序后的结果
printf("%d\t",arr[i]);
}
printf("\n");
}
执行结果
排序前:1423 23456 3678 4789 590 628 724 4568 956 10
排序后:10 590 628 724 956 1423 3678 4568 4789 23456