(c語言)選擇排序法和氣泡排序法
阿新 • • 發佈:2019-01-02
問題描述:
給定一個數組(或者輸入一個數組),分別運用選擇排序法和氣泡排序法將所要的結果輸出。
程式分析:
選擇排序
1>.對於選擇排序,首先理解排序的思想。給定一個數組,這種思想首先假定陣列的首元素為最大(最小)的。此時就要利用3個變數i,j,k表示元素的下標。i表示當前,j表示找到的最大(最小)的下標,k用於存放每次迴圈中最大值的下標。
2>.在掌握了程式的基本思想之後,再進行排序。找到最大的下標後賦給k。找到之後判斷所假設的當前值是否為此次迴圈的最大值,如果不是,就交換a[k] 與當前a[i]的值,從而將陣列以一定的順序排放,最後寫一個迴圈將結果輸出。
氣泡排序
1>.對於氣泡排序,主要採用的是相鄰數兩兩進行比較的思想。如果後一個比前一個大(小),則將其調換位置,直至所有的數都比較完。
2>.如果給定一個大小為n的陣列,那麼需要比較n-1趟,每一趟比較n-1-i次 ,i 表示上次迴圈中已經比較完的下標。寫兩個迴圈 判斷,如需交換則進行交換,如果不需要交換則進行下兩個數的比較,直到所有的數比較完。最後,用一個迴圈將排序完成後的數全部輸出。
程式如下:
/*********************選擇排序******************************/ /*#include<stdio.h> int main() { int i = 0; //定義一個i並且賦初值為0,i作為陣列的下標 int j = 0; //定義j並且賦初值為0,j作為找到最大值時所對應的下標 int k; //定義一個k,用來儲存此次迴圈中最大值的下標 int temp; //定義一箇中間變數temp,供以後交換值的時候使用 int a[]={4,5,6,72,1,7,9,3,}; //定義了一個9個數的陣列,並且初始化 int len = sizeof(a)/sizeof(a[0]); //len是陣列的大小 for(i = 0;i<len;i++) //判斷i是否小於len,執行下面的語句 { k = i; //假設此次迴圈中的最大值就是當前的值 for(j = i+1;j<len;j++) { if(a[j]>a[k]) //將假設的當前最大值與後面的值比較 { k = j; //若後面的值更大,則交換下標 } },當前最大值 if(k != i) //比較之後如果此次迴圈中最大值並非當前值 { temp = a[i]; //將此次迴圈中的最大值與a[k]交換 a[i] = a[k]; a[k] = temp; } } for(i=0;i<len;i++) //利用for迴圈將結果依次輸出 { printf("%d ",a[i]); } return 0; }*/ /*************************氣泡排序******************************/ /*#include<stdio.h> int main() { int i = 0; int j = 0; int temp; int a[10] = {9,8,7,6,5,4,3,2,1,0}; int len = sizeof(a)/sizeof(a[0]); for(i = 0;i<len-1;i++) { for(j = 0;j< len-1-i;j++) { if(a[j+1]>a[j]) { temp = a[j+1]; a[j+1] = a[j]; a[j] = temp; i++; } } } for(i = 0;i<len;i++) { printf("%d ",a[i]); } return 0; }*/