選擇排序法和氣泡排序法

2021-10-06 03:20:19 字數 1596 閱讀 5260

思想:從待排序元素中的第乙個開始,每乙個依次與後面的所有元素作比較,再交換值。

#include

intmain()

;int i,j,t;

for(i=

0; i<

10; i++

)//從第乙個開始}}

for(i=

0; i<

10; i++

)printf

("arr[%d] = %d\n"

,i,arr[i]);

return0;

}

優化:

我們不能減少比較次數,但是可以減少交換次數,比而不換,記錄下標,與後面所有元素比較完後,再來交換值。

#include

intmain()

;int i,j,t,idx;

for(i=

0; i<

10; i++

)//從第乙個開始}if

(idx != i)

//idx != i,假設不成立,交換最小下標所在元素和當前元素的值

}for

(i=0

; i<

10; i++

)printf

("arr[%d] = %d\n"

,i,arr[i]);

return0;

}

思想:每次從頭開始,依次比較相鄰元素,再交換。經過一輪比較後,就已經確定好最後乙個元素的值。再進行下一輪比較,已經排好的最後乙個元素就可以不參加排序了。

圖示:

如何確定i,j邊界:

n個數,經過一輪比較後,會排好最後乙個元素,當只剩兩個數未排好時,又經一輪過後,最後乙個數排好的同時,第乙個數也已經排好,所只需要n-1輪比較就能全部排好。所以外重迴圈i#include

#define n 10

intmain()

;int i,j,t;

for(i=

0; i

1; i++)}

}for

(i=0

; i)printf

("%d\n"

,arr[i]);

return0;

}優化:

當出現在比完一輪或兩輪,這組資料已經變得有序了,後面的每輪比較都不會再交換值了,也就沒有意義了,我們就可以提前結束迴圈。

#include
#define n 10

intmain()

;int i,j,t;

int flog =1;

//定義乙個標誌

for(i=

0; i

1; i++)}

if(flog)

break

;//若flog為1,則意味著這一輪比較沒有再交換值,說明已經有序,提前結束迴圈。

}for

(i=0

; i)printf

("%d\n"

,arr[i]);

return0;

}

選擇排序法和氣泡排序法

例題 自定義函式,從鍵盤輸入n個數,對它進行從小到大的排序,要求從主函式輸出排序的結果。方法一 氣泡排序法 include define n 10 using namespace std int main void bubble sort int a 氣泡排序法分析 先從第乙個元素開始,各位相鄰元素...

選擇排序法和氣泡排序法

1.選擇排序法 以從小到大排序為例 演算法思想 a.在未排序序列中找到最小 大 元素,存放到排序序列的起始位置 b.從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾 c.以此類推,直到所有元素均排序完畢 選擇排序法 演示 用c語言實現選擇排序法 include intmain vo...

氣泡排序法 選擇排序法

相鄰兩個數進行比較 如果前者比後者大 就把前者和後者互換 比如十個數 經過九次比較 就可以得到乙個最大的數字於排列的最末端 再經過八次比較 可以得到乙個第二大的數 依次類推 即最大的數一次一次冒泡上來。include int main printf n 資料排序 for i 0 i 9 i 列印資料...