冒泡排序思想就是相邻两个数比较大小,将最大或最小的数放在最后,最后那个数确定并不在比较,再从第一个数进行冒泡比较。
冒泡排序的时间复杂度是O(n^2),稳定性:因为冒泡排序中,要求A[i-1]是严格大于A[i]的,在交换的过程中。重复元素虽然有所聚集,但不会相互跨越。因此冒泡排序是稳定的。
A[5]={4,6,3,7,2}
两个for循环进行排序
for (int i = 0; i < A.length - 1; i++) {
for (int j = 0; j < A.length -1 - i; j++) {
if (A[j] > A[j+1]) {
temp = A[j];
A[j] = A[j+1];
A[j+1] = temp;
}
}
}
一个for循环和while(flag)会好点
/*C++*/
void bubbleSort1(int A[],int n)
{
bool sorted=false; //排序状态为无序
while(!sorted)/*逐趟扫描交换,直到sorted=true,即为有序状态*/
{
sorted=true; //如果接下来if判断一次也不执行,则序列整体有序
for(int i=1;i<n;i++)//A[0,n)
{
if(A[i-1]>A[i]) //逆序
{
swap(A[i-1],A[i]);//交换
sorted=false; //序列状态未定
}
}
--n; //进行下一趟比较,序列向前缩进
}
}