以从小到大排序为例:
设数组长度为N。
1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。
2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。
3.N=N-1,如果N不为0就重复前面二步,否则排序完成。
#include <iostream>
using namespace std;
void BubbleSort(int arr[],int n);
void swap(int &a,int &b);
int main()
{
int arr[] = {2,6,-5,1,7,8,3};
int n = 7;
BubbleSort(arr,n);
for(int i = 0;i<n;i++)
{
cout<<arr[i];
}
cout<<endl;
return 0;
}
//1、设置一个标志,如果这一趟发生了交换,则为true,否则为false。如果有一趟没有发生交换,说明排序已经完成
//2、若某位置后已有序,记录此位置,下次只要从头部遍历到这个位置就可以了
void BubbleSort(int arr[],int n)
{
bool flag = true;
int pos = n;
while(flag)
{
flag = false;
//for(int ge = 0;ge<n;ge++)
//{
for(int ci = 0;ci<n-1;ci++)//ci<n-1
{
if(arr[ci]>arr[ci+1])
{
swap(arr[ci],arr[ci+1]);
flag = true;
pos = ci+1;
}
}
//}
}
}
void swap(int &a,int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}