閑來無聊,練練腦子,活動一下筋骨。下面是基于C語言的優化冒泡排序核心代碼,復制過去在C語言編譯平臺就能運行。可以很清楚理解冒泡排序的原理。- #include<stdio.h>
- void BubbleSort(int k[],int n) //函數里形參也可以是:int *k
- {
- int i,j,temp,count1=0,count2=0,flag;
- flag=1;
- for(i=0;i<n-1&&flag;i++)
- {
- for(j=n-1;j>i;j--)
- {
- count1++;
- flag=0;
- if(k[j-1]>k[j])
- {
- count2++;
-
- temp=k[j-1];
- k[j-1]=k[j];
- k[j]=temp;
- flag=1;
- }
-
- }
- }
- printf("總共進行了%d次比較,進行了%d次移動" ,count1,count2);
- }
- int main(void)//比較,輸出最大值
- {
-
- // int m, a[10]={ 9,7,0,1,5,4,2,3,6,8 };
- // int m, a[10]={ 9,7,0,1,2,3,4,5,6,8 }; //那么排序的效率就大大增加了;
- int m, a[10]={ 10,0,7,2,34,6,6,8 ,9,0};//那么排序的效率就大大增加了;
- BubbleSort( a,10);
- printf("排序后的結果是:" );
- for(m=0;m<10;m++)
- {
- printf("%d\n\r" ,a[m]);
- }
- return 0; //結束主函數
- }
- /* 本函數關鍵要理解兩個for循環的作用;count1和count2,以及flag變量的作用。 */
復制代碼 代碼雖然很簡單,但是在實際應用中卻很有用。比如,在圓點博士的四軸飛行器AD參數傳輸中就有類似本函數的數字濾波函數;還有手機觸摸屏的觸摸坐標校正也有用到數字濾波。冒泡排序核心代碼是經過優化處理了的,效率相對較高。
-----王衍
|