什么是冒泡排序?
冒泡排序是一种交换排序,所谓交换,就是将相邻元素两两比较,如果反序则进行交换从而使元素有序。之所以叫冒泡排序是因为,元素是从最后开始进行两两比较,将小的元素放到最上面的位置,看上去就跟气泡往上冒一样。
代码实现:
<span style="font-family:Courier New;font-size:14px;">#include <iostream> #define MAXSIZE 10 using namespace std; struct SqList { int r[MAXSIZE]; int length; }; //元素交换 void swap(SqList *L,int i,int j) { int temp; temp = L->r[i]; L->r[i] = L->r[j]; L->r[j] = temp; } /** 冒泡排序 共需进行n-1趟 从最后一个元素开始依次与前一个元素进行比较, 若小于前一个元素,则进行交换 */ void BubbleSort(SqList *L) { int i,j; for(i=1;i<L->length;i++) { for(j=L->length-1;j>=i;j--) { if(L->r[j]>L->r[j+1]) { swap(L,j,j+1); } } } } /** 增进版 冒泡排序 这是为了再进行一两次比较后,元素已经有序了, 后面不再需要进行比较排序了。 比如序列:2,1,3,4,5,6,7,8,9 当进行完依次比较后,此时序列为1,2,3,4,5,6,7,8,9 那么此时已经有序了,因此后面就无序比较,直接退出循环就行 所以,引入一个标志变量,当元素交换时置为true,没有时置为false 则在外循环中,当变量为false时,就退出循环了,说明此时已经有序了 */ void BubbleSort2(SqList *L) { int i,j; bool flag = true; for(i=1;i<L->length&&flag;i++) { flag = false; for(j=L->length-1;j>=i;j--) { if(L->r[j]>L->r[j+1]) { swap(L,j,j+1); flag = true; } } } } void Print(SqList *L) { for(int i=1;i<=L->length;i++) { cout<<L->r[i]<<" "; } cout<<endl; } int main() { SqList s={{0,9,1,5,8,3,7,4,6,2},9}; //0为占位 cout<<"排序前:"<<endl; Print(&s); BubbleSort(&s); cout<<"排序后:"<<endl; Print(&s); return 0; } </span>
时间: 2024-12-28 01:03:05