C說話冒泡排序算完成代碼。本站提示廣大學習愛好者:(C說話冒泡排序算完成代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話冒泡排序算完成代碼正文
冒泡排序是排序算法的一種,思緒清楚,代碼簡練,常被用在年夜先生盤算機課程中。
“冒泡”這個名字的由來是由於越年夜的元素會經過交流漸漸“浮”到數列的頂端,故名。
這裡以從小到年夜排序為例停止講授。
根本思惟及舉例解釋
冒泡排序的根本思惟就是赓續比擬相鄰的兩個數,讓較年夜的元素赓續地往後移。經由一輪比擬,就選出最年夜的數;經由第2輪比擬,就選出次年夜的數,以此類推。
上面以對 3 2 4 1 停止冒泡排序解釋。
第一輪 排序進程
3 2 4 1 (最後)
2 3 4 2 (比擬3和2,交流)
2 3 4 1 (比擬3和4,不交流)
2 3 1 4 (比擬4和1,交流)
第一輪停止,最年夜的數4曾經在最初面,是以第二輪排序只須要對後面三個數停止再比擬。
第二輪 排序進程
2 3 1 4 (第一輪排序成果)
2 3 1 4 (比擬2和3,不交流)
2 1 3 4 (比擬3和1,交流
第二輪停止,第二年夜的數曾經排在倒數第二個地位,所以第三輪只須要比擬前兩個元素。
第三輪 排序進程
2 1 3 4 (第二輪排序成果)
1 2 3 4 (比擬2和1,交流)
至此,排序停止。
算法總結及完成
關於具有N個元素的數組R[n],停止最多N-1輪比擬;
第一輪,逐一比擬(R[1], R[2]), (R[2], R[3]), (R[3], R[4]), ……. (R[N-1], R[N]) ; 最年夜的元素會被挪動到R[N]上。
第二輪,逐一比擬(R[1], R[2]), (R[2], R[3]), (R[3], R[4]), ……. (R[N-2], R[N-1]);第二年夜元素會被挪動到R[N-1]上。
。。。。
以此類推,直到全部數組從小到年夜排序。
上面給出了冒泡排序的普通完成和優化完成。普通完成是教科書裡罕見的完成辦法,不管數組能否排序好了,都邑停止N-1輪比擬; 而優化完成,在數組曾經排序好的情形下,會提早加入比擬,減小了算法的時光龐雜度。
#include<stdio.h> #include<stdlib.h> #define N 8 void bubble_sort(int a[],int n); //普通完成 void bubble_sort(int a[],int n)//n為數組a的元素個數 { //必定停止N-1輪比擬 for(int i=0; i<n-1; i++) { //每輪比擬前n-1-i個,即已排序好的最初i個不消比擬 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; } } } } //優化完成 void bubble_sort_better(int a[],int n)//n為數組a的元素個數 { //最多停止N-1輪比擬 for(int i=0; i<n-1; i++) { bool isSorted = true; //每輪比擬前n-1-i個,即已排序好的最初i個不消比擬 for(int j=0; j<n-1-i; j++) { if(a[j] > a[j+1]) { isSorted = false; int temp = a[j]; a[j] = a[j+1]; a[j+1]=temp; } } if(isSorted) break; //假如沒有產生交流,解釋數組曾經排序好了 } } int main() { int num[N] = {89, 38, 11, 78, 96, 44, 19, 25}; bubble_sort(num, N); //或許應用bubble_sort_better(num, N); for(int i=0; i<N; i++) printf("%d ", num[i]); printf("\n"); system("pause"); return 0; }