冒泡排序
冒泡排序是交换排序的一种,冒泡排序是稳定排序。
冒泡排序就像接力一样,从1号位出发,如果遇到比它大的,就由新的这个元素接过接力棒,继续寻找比自己大的元素,直到找到数组末尾,最大的元素就被定到了最后一位。紧接着再来找第二大的元素定到倒数第二位、第三大元素、第四、、、。有序的区间不断增大,当中途没有出现交换的时候或者是非有序元素只剩一个,排序就结束。
void BubbleSort(int* arr,int len){
int i = 0;
int exchange = 1;
while(i < len - 1 && exchange){ //没有交换意味着结束
exchange = 0; //标志置为0,假定未交换
for(int j = 0;j < len - 1 - i;j ++)
if(arr[j] > arr[j+1]){
//swap
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
exchange = 1; //标志置为1,有交换
}
i++;
}
}
代码如下:
#include<iostream>
using namespace std;
//9-18
//冒泡排序
void BubbleSort(int* arr,int len){
int i = 0;
int exchange = 1;
while(i < len - 1 && exchange){ //没有交换意味着结束
exchange = 0; //标志置为0,假定未交换
for(int j = 0;j < len - 1 - i;j ++)
if(arr[j] > arr[j+1]){
//swap
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
exchange = 1; //标志置为1,有交换
}
i++;
}
}
int main(){
int arr[] = {2,6,7,4,3,1,0,9,8,5};
for(int i = 0;i < 10;i ++) cout<<arr[i]<<" ";
cout<<endl;
BubbleSort(arr,10);
for(int i = 0;i < 10;i ++) cout<<arr[i]<<" ";
cout<<endl;
}
运行结果: