您的位置:首页 > 其它

冒泡排序

2016-04-15 19:08 225 查看
冒泡排序(Bubble Sort): 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。是一种稳定和不需要额外空间的排序算法

算法原理

1. 比较相邻的元素,如果第一个比第二个大,就交换,最后一个就是最大的元素;

2. 对剩余的n-1个元素重复1的步骤,又把第二大冒的倒数第二的位置,以此类推。

算法分析

3. 时间复杂度

冒泡排序最好的时间复杂度为O(n);最差是O(n^2); 综上,因此冒泡排序总的平均时间复杂度为 O(n^2);

4. 算法稳定性

冒泡排序是一种稳定排序算法。

#include <stdio.h>
#include <stdlib.h>
void bubbleSort(int arr[],int n){//冒泡排序
int i,j,temp;
for(i=0;i<n-1;i++){

for(j=0;j<n-1-i;j++){
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}

int main()
{
int n,arr
,i,j;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&arr[i]);
}
bubbleSort(arr,n);
for(j=0;j<n;j++){
printf("%d ",arr[j]);
}
return 0;
}


如果上面代码中,里面一层循环在某次扫描中没有执行交换,则说明此时数组已经全部有序列,无需再扫描了。因此,增加一个标记,每次发生交换,就标记,如果某次循环完没有标记,则说明已经完成排序。
#include <stdio.h>
#include <stdlib.h>
void bubbleSort(int arr[],int n){//冒泡排序
int i,j,temp;
int sroted=0;
for(i=0;i<n-1;i++){
//每次先置为true
sroted=0;
for(j=0;j<n-1-i;j++){
if(arr[j]>arr[j+1]){

temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;

sroted=1;
}
}
// 如果上一次扫描没有发生交换,则说明数组已经全部有序,退出循环
if(sroted==0){
break;
}
}
}

int main()
{
int n,arr
,i,j;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&arr[i]);
}
bubbleSort(arr,n);
for(j=0;j<n;j++){
printf("%d ",arr[j]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  冒泡排序 算法