日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言选择排序_冒泡、插入、选择排序(C语言)

發布時間:2024/1/23 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言选择排序_冒泡、插入、选择排序(C语言) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 以下排序算法默認從小到大的升序排序。

冒泡排序

  • 思路從數組的第一個數a[0]開始,向后遍歷,每次比較a[i]和a[i+1]的值若a[i]大于a[i+1],就交換兩個位置的數的值。重復上述1和2的操作至a[n-2]。
  • 優化第三部改為重復上述操作直至不再出現值的交換。(若一次遍歷沒有值得交換,說明該數組從左到右是升序)
  • 代碼
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[1]值插入到a[0]中,然后a[2]插入到a[0]--a[1]的數組中,依次向后遍歷,直至將a[n-1]插入到a[0] -- a[n-2]的數組中。保存a[i]的值,因為a[0]到a[i-1]已經使用插入排序排好序了,此時從后往前數值依次變小,判斷a[i-1],a[i-2]...等等數中,小于a[i]的值,將a[i]插入該數位置之后。
  • 思路先用num保存a[i]的值,每次執行插入操作時,判斷a[i]與a[i-k]的值的大小,(k從1到i)若a[i]小于a[i-1],將a[i]的值后移一位到a[i+1]的位置,然后繼續比較a[i]與a[i-2]的值.若a[i]大于a[i-k],則直接退出循環2和3步驟將a[i]的值插入a[i+1]的位置
  • 圖解
  • 代碼
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[0]與其他數a[1]到a[n-1]做比較如果小于a[0]就和a[0]交換。這樣,一次的循環就可以把數組最小的數放在a[0].再一次遍歷a[1]到a[n-1]。
  • 代碼// 插入排序,a 表示數組,n 表示數組大小
// 插入排序,a 表示數組,n 表示數組大小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; }}

總代碼

#include #include //函數聲明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("原數組:"); printArray(a,5); bubbleSort(a,5); printf("冒泡排序后數組:"); printArray(a,5); //插入排序 initArray(a,5); printf("原數組:"); printArray(a,5); insertionSort(a,5); printf("插入排序后數組:"); printArray(a,5); //選擇排序 initArray(a,5); printf("原數組:"); printArray(a,5); choose(a,5); printf("選擇排序后數組:"); printArray(a,5); return 0;}void initArray(int a[],int n){ for(int i = 0; i < n; i++) a[i] = rand()%100 + 10;}//數組輸出函數void printArray(int a[],int n){ for(int i = 0; i < n; i++) { printf("%d ",a[i]); } printf("");}// 冒泡排序,a 表示數組,n 表示數組大小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 表示數組,n 表示數組大小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 表示數組,n 表示數組大小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; } } }}

總結

以上是生活随笔為你收集整理的c语言选择排序_冒泡、插入、选择排序(C语言)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。