蛮力法冒泡排序
Posted 望北i
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蛮力法冒泡排序相关的知识,希望对你有一定的参考价值。
蛮力法冒泡排序
蛮力法在冒泡排序上,比较数组中相邻元素,如果它们是逆序的话,就交换它们的位置。重复多次以后,最终最大的元素就沉到数组最后一个位置,第二遍将第二大的元素沉下去。一直这样做,直到 n - 1 遍以后,该数组就排好序了。
第 i (0 <= i <= n - 2) 遍冒泡排序可以用
A[0] , A[j] , A[j], … , A[n - i - 1] | A[n - i] <= … A[n - 1];
算法 BubbleSort(A [ n] )
//该算法用冒泡排序对数组 A[n] 进行排序
//输入:一个可排序的数组 A [n]
//输出:升序排列的数组 A [n]
for i <–0 to do
for j <-- 0 to n - 2 - i do
if A[j + 1] < A[ j ]
swap A[ j ] and A[ j + 1]
核心代码
void BubbleSort(int a[], int n){
int temp;
for(int i = 0; i <= n - 2; i++){
for(int j = 0; j <= n - 2 - i; j++){
if(a[j + 1] < a[j]){
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
例如:用蛮力法对序列89,445,68,90,29,34,17做冒泡排序
/*冒泡排序*/
#include<stdio.h>
void BubbleSort(int a[], int n){
int temp;
for(int i = 0; i <= n - 2; i++){
for(int j = 0; j <= n - 2 - i; j++){
if(a[j + 1] < a[j]){
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for(int i = 0; i < 7; i++)
printf("%-3d", a[i]);
}
int main(){
int a[7] = {89, 45, 68, 90, 29, 34, 81};
printf("排序前的元素\\n");
for(int i = 0; i < 7; i++)
printf("%-3d", a[i]);
printf("\\n");
printf("排序后的元素为\\n");
BubbleSort(a, 7);
return 0;
}
运行结果
代码分析
时间复杂度分析:对于所有规模为 n 的数组来说,该冒泡排序的键值比较次数都是相同的,C( n ) = O(n2),但它的建的交换次数取决于特定的输入。最坏情况下就是遇到降序排序的数组,这是键的交换次数和键的比较次数是相同的,C( n ) = O( n2), 综上,因此冒泡排序总的时间复杂度为 O( n)
空间复杂度为:O(1)
冒泡排序是稳定排序,不会改变数据的大小的相对位置。
结尾
写博客是为了一是整理所学知识,亲生写代码的经验,而是为了总结经典算法,三是督促自己努力,懂得越多,越知道自己知识的浅薄,四是希望和他人多多交流,有什么不对的地方大佬们多多指点
以上是关于蛮力法冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章