1. 程式人生 > >C語言二分查找與冒泡排序

C語言二分查找與冒泡排序

減少 stdio.h spa main while 特意 習慣 條件 string

今天數據結構上機課,老師給了我們幾個上個學期做過的C語言題,我驚訝的發現,之前會的算法,時間久了就忘記了,很尷尬,這也充分說明了 我C語言學習功底不夠紮實。所以,在課後,我認認真真重新推了一遍,希望下次不會忘記了。

 1 #include<stdio.h>
 2 main()
 3 {
 4     int a[]={2,4,6,8,10,12,14,16,18,20};
 5     int left,right,mid,b;//定義變量
 6     printf("請輸入b的值:");
 7     scanf("%d",&b);//輸入要查找的值
 8
left=0;//最左端的數組下角標 9 right=9;//最右邊的數組下角標 10 while(left<=right)//循環條件{ 11 mid=(left+right)/2;//中間的數組下角標,特別註意 整數除整數得到的 還是整數 12 if(b>a[mid]){ 13 left=mid+1; 14 } 15 else if(b<a[mid]){ 16 right=mid-1; 17 } 18 else if
(b==a[mid]){ 19 printf("查找成功,它位於第%d個",mid+1); break; 20 } 21 } 22 if(left>right){ 23 printf("您輸入的值不在此範圍內!"); 24 } 25 }

思路清晰後,在敲代碼的過程中,也頻頻出現問題。例如,第18-19行,運行程序後,當查找成功時,我是沒有加“break”語句跳出循環的,導致出現了死循環的狀況。

此二分查找方式,在查找之前,應是已經排好序的大大減少了運算的範圍,時間復雜度小,提高了效率。

下面是一種比較常用的查找方式,冒泡排序,它有很多種,可以根據自己的習慣與經驗來運用。我比較熱愛這種冒泡排序 1 #include<stdio 2 #include<string.h>

 3 #define N 10
//定義一個冒泡排序的函數 4 void sort(int a[],int n) 5 {int i,j,t; 6 for(i=0;i<n-1;i++) 7 for(j=0;j<n-i-1;j++) 8 if(a[j]>a[j+1]) 9 { 10 t=a[j];a[j]=a[j+1];a[j+1]=t; 11 }
12 } 13 main(){ 14 int a[N],i; 15 printf("\nEnter %d num:",N); 16 for(i=0;i<N;i++){ 17 scanf("%d",&a[i]); 18 } 19 printf("排序前:"); 20 for(i=0;i<N;i++){ 21 printf("\n"); 22 printf("%4d",*(a+i)); 23 } 24 sort(a,N); 25 printf("\n"); 26 printf("排序後:"); 27 for(i=0;i<N;i++){ 28 printf("\n"); 29 printf("%4d",*(a+i)); 30 } 31 }

當然我們也可以不用特意寫函數來實現,可以簡單的直接運用冒泡排排序啦。

以上僅為個人的理解,歡迎質疑與評論,嘻嘻

C語言二分查找與冒泡排序