iT邦幫忙

2021 iThome 鐵人賽

DAY 23
1

不知道大家對於 Bubble sort 的程式有沒有甚麼問題呢?
今天,我們就來討論一下程式碼!

我的程式碼如下:

#include<stdio.h>
int main(){
	int data[10];
	int i = 0, j = 0, k;
	for(i=0; i<10; i++){
		printf("please input a number>>");
		scanf("%d", &data[i]);
	}
	printf("unsorted:"); 
	for(i=0;i<10;i++)
		printf("%d ",data[i]);
	//bubble sort 
	for(i=0; i<9 ; i++){
		for(j=0; j<9-i-1; j++){
			if(data[j]>data[j+1]){  // change
				data[j]=data[j]^data[j+1];
				data[j+1]=data[j]^data[j+1];
				data[j]=data[j]^data[j+1];
			}
			
		}
		printf("\n");
		printf("i=%d \n",i);
		for(k=0;k<10;k++)
			printf("%d ",data[k]);

	}
	printf("\nsorted:");
	for(i=0;i<10;i++)
	printf("%d ",data[i]);	
	return 0;
}

輸出結果:

我的思路:

  1. 首先,我們知道要輸入十個數字,所以先宣告一個長度等於 10 的陣列,然後透過昨天的圖,也知道 bubble sort 會用到兩個迴圈,所以宣告兩個變數去控制,分別是 ij
  2. 我們利用迴圈與 printf() 函式引導使用者輸入資料、 scanf() 函式去讓使用者輸入 10 筆資料、放在陣列中,並先輸出未排序的資料。(方便觀察資料有沒有被放進陣列中)
  3. 開始做 bubble sort。因為我們有十筆資料,外迴圈會做九次,內迴圈我們用 j<9-i 去控制,因為內迴圈的次數是會隨著已排序的數字變多而變少,所以在條件的地方可以用 去控制。(忘記的讀者可以去看昨天講解的圖回憶一下會更清楚喔!)
  4. 經過 bubble sort 後,我們的資料基本上已經從大到小排序完成了!最後,就是把已排序的資料配合迴圈輸出~(為了方便讀者了解,這裡每做一次排序就把資料印出,就可以知道排序的過程了!)

自己寫完 bubble sort後,有沒有覺得頗有成就感呢?
我個人是覺得 bubble sort 是算比較直觀的排序方式,還有其他排序方式,如:插入排序法(Insertion sort)、選擇排序法(Selection sort)、快速排序法(Quick sort)等等,有興趣的讀者都可以在網路上找到很多相關資料,在這裡我們就先不繼續談。

明天,讓我們進入一個比較困難的單元-指標!


上一篇
【Day 22】陣列的應用-Bubble sort
下一篇
【Day 24】指標介紹(上)
系列文
C 語言的簡單入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言