c语言选择排序_冒泡、插入、选择排序(C语言)
生活随笔
收集整理的這篇文章主要介紹了
c语言选择排序_冒泡、插入、选择排序(C语言)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
- 以下排序算法默認(rèn)從小到大的升序排序。
冒泡排序
- 思路從數(shù)組的第一個數(shù)a[0]開始,向后遍歷,每次比較a[i]和a[i+1]的值若a[i]大于a[i+1],就交換兩個位置的數(shù)的值。重復(fù)上述1和2的操作至a[n-2]。
- 優(yōu)化第三部改為重復(fù)上述操作直至不再出現(xiàn)值的交換。(若一次遍歷沒有值得交換,說明該數(shù)組從左到右是升序)
- 代碼
插入排序
- 思路講解所謂插入排序,就是把a[1]值插入到a[0]中,然后a[2]插入到a[0]--a[1]的數(shù)組中,依次向后遍歷,直至將a[n-1]插入到a[0] -- a[n-2]的數(shù)組中。保存a[i]的值,因為a[0]到a[i-1]已經(jīng)使用插入排序排好序了,此時從后往前數(shù)值依次變小,判斷a[i-1],a[i-2]...等等數(shù)中,小于a[i]的值,將a[i]插入該數(shù)位置之后。
- 思路先用num保存a[i]的值,每次執(zhí)行插入操作時,判斷a[i]與a[i-k]的值的大小,(k從1到i)若a[i]小于a[i-1],將a[i]的值后移一位到a[i+1]的位置,然后繼續(xù)比較a[i]與a[i-2]的值.若a[i]大于a[i-k],則直接退出循環(huán)2和3步驟將a[i]的值插入a[i+1]的位置
- 圖解
- 代碼
選擇排序
- 思路選擇排序最好理解將數(shù)組的第一個數(shù)a[0]與其他數(shù)a[1]到a[n-1]做比較如果小于a[0]就和a[0]交換。這樣,一次的循環(huán)就可以把數(shù)組最小的數(shù)放在a[0].再一次遍歷a[1]到a[n-1]。
- 代碼// 插入排序,a 表示數(shù)組,n 表示數(shù)組大小
總代碼
#include #include //函數(shù)聲明void initArray(int a[],int n);void printArray(int a[],int n);void bubbleSort(int a[],int n);void insertionSort(int a[], int n);void choose(int a[], int n);int main(){ int a[5]; //冒泡排序 initArray(a,5); printf("原數(shù)組:"); printArray(a,5); bubbleSort(a,5); printf("冒泡排序后數(shù)組:"); printArray(a,5); //插入排序 initArray(a,5); printf("原數(shù)組:"); printArray(a,5); insertionSort(a,5); printf("插入排序后數(shù)組:"); printArray(a,5); //選擇排序 initArray(a,5); printf("原數(shù)組:"); printArray(a,5); choose(a,5); printf("選擇排序后數(shù)組:"); printArray(a,5); return 0;}void initArray(int a[],int n){ for(int i = 0; i < n; i++) a[i] = rand()%100 + 10;}//數(shù)組輸出函數(shù)void printArray(int a[],int n){ for(int i = 0; i < n; i++) { printf("%d ",a[i]); } printf("");}// 冒泡排序,a 表示數(shù)組,n 表示數(shù)組大小void bubbleSort(int a[],int n){ if(n <= 1) return; for(int i = 0; i < n; i++) { int flag = 0; for(int j = 0; j < n - 1 - i; j++) { if(a[j] > a[j + 1]) { int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; flag = 1; } } if(!flag) break; }}// 插入排序,a 表示數(shù)組,n 表示數(shù)組大小void insertionSort(int a[], int n) { if(n <= 1) return; for(int i = 1; i < n; i++) { int value = a[i]; int j; for(j = i - 1; j >= 0; j--) { if(value < a[j]) a[j + 1] = a[j]; else break; } a[j + 1] = value; }}// 選擇排序,a 表示數(shù)組,n 表示數(shù)組大小void choose(int a[], int n) { for(int i = 0; i < n; i++) { for(int j = i + 1; j < n; j++) { if(a[i] > a[j]) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } } }}總結(jié)
以上是生活随笔為你收集整理的c语言选择排序_冒泡、插入、选择排序(C语言)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wps 模拟分析 规划求解_FFU气流仿
- 下一篇: java 最少使用(lru)置换算法_一