冒泡排序的实现:
对于外层循环,每一轮循环将一个数向上浮出,故最少要N-1次循环。
对于内存循环,第i次循环的时候,上面的 i-1 个已经排好了此时需要进行冒泡排序的只有N-i+1个。下标则是从0到N-i。具体的代码如下
外层循环的下标从0到N-1,由于最后一次循环没有必要,所以只需要到N-2即可。
内层循环到下表从0到N-i-1,由于比较的是arr[i]和arr[i+1],所以应该的下标是从0到N-i-2;
具体的代码下载链接为:https://github.com/BLYang7/DataStructure/blob/master/Sort.java
排序的流程如下图:
对于单次的循环,就是在从0到N-i这个区间内,将某个元素向上浮出,比如说外循环的第三次循环:
实现代码如下:
java版:
public class BubbleSort {
/**
* 冒泡排序算法 java实现
*/
private static void bubbleSort(int[] arr){
for(int i=0; i<arr.length-1; i++){
for(int j=0; j<arr.length-i-1; j++){ //注意下标
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
//测试
public static void main(String[] args) {
int[] arr = {1,2,3,7,4,6,5,0};
bubbleSort(arr);
for(int a : arr){
System.out.print(a + " ");
}
}
}
C++版:
#include"iostream"
using namespace std;
#define _MAX_ 25
int R[_MAX_];
void BubbleSort(int n)
{
int i,j,temp;
for(i=0;i<n-1;i++) //总共需要进行n-1次轮询
for(j=0;j<n-i-1;j++) //每次轮询都要从第一个数字到第n-i-1个,在数组顶部已经排好的,不用讨论
{
if(R[j]>R[j+1]) //每次轮询的时候,如果前一个值比后一个值大,则选择互相调换
{
temp=R[j];
R[j]=R[j+1];
R[j+1]=temp;
}
}
}
void main()
{
int k,n;
cout<<"input how many number you want to make in order:"<<endl;
cin>>n;
for(k=0;k<n;k++)
cin>>R[k];
BubbleSort(n);
for(k=0;k<n;k++)
cout<<R[k]<<" ";
}