1、定义:算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
2.步骤**:**
(1)、从头开始,按照大的排在后面的次序(也可小的排在后面)进行两两交换,假定经过一轮两两交换后,最后一个数字为最大的;
(2)、第二次,除最后一个不参与比较之外,其余数字按第一步骤依次进行。
(3)、重复上述步骤,每次需比较的数字个数依次递减。直到所有的都比较完。
3、例如:3 7 4 2 6 1
C语言代码
#include<stdio.h>
void bubble(int arr[],int n) //使用数组
{ int i;
int temp;
for(i=0;i<n-1;i++){
if(arr[i]<arr[i+1]){
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp; //交换
}
}
}
void bubleSort(int arr[],int n){
int i;
for(i=n;i>=1;i--){
bubble(arr,i);
}
}
int main(){
int arr[]={6,5,1,2,3,9,8,4,7};
int i;
bubble(arr,9);
for(i=0;i<=9;i++){
printf("%d\n",arr[i]);
}
return 0;
}
C++代码
#include<iostream>
using namespace std;
void bubbleSort(int arr[],int n){
int i,j;
for(i=0;i<n;i++) //外循环为比较趟数比较n次
for(j=0;j<n-1;j++){ //内循环每趟需要比较的次数,比较n-1次
if(arr[j]>arr[j+1])
swap(arr[j],arr[j+1]);
}
}
int main(){
int arr[10]={4,5,7,1,8,2,9,0,3,6};
cout<<"排序前的数组:"<<endl;
for(int i=0;i<10;i++)
cout<<arr[i]<<" ";
cout<<endl;
bubbleSort(arr,10);
cout<<"排序后的数组:"<<endl;
for(int i=0;i<10;i++)
cout<<arr[i]<<" ";
cout<<endl;
}
JAVA实验
package maopao;
import java.lang.reflect.Array;
public class Solution {
public static void main(String[] args) {
int arr[] = new int[] {1,3,5,7,8,6,4,2};
int i,j;
for(i =0;i<arr.length-1;i++) {
for(j=0;j<arr.length-1-i;j++) {
if(arr[j]>arr[j+1]) {
int temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
System.out.println("从小到大排序后:");
for(i=0;i<arr.length;i++);
System.out.println(arr[i]+" ");
}
}
}
}
4、冒泡排序的时间复杂度:O(n^2)
5、空间复杂度:O(1)