1.原理: 比較兩個相鄰的元素,將值大的元素交換到右邊
成都創新互聯公司長期為上1000+客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為新縣企業提供專業的網站設計、成都網站設計,新縣網站改版等技術服務。擁有十載豐富建站經驗和眾多成功案例,為您定制開發。2.設計原理:(文字):N個數字要排序完成,總共進行N-1趟排序,每i趟的排序次數為(N-i)次,所以可以用雙重循環語句,外層控制循環多少趟,內層控制每一趟的循環次數
舉例來說:
3.冒泡排序的優點: 每進行一趟排序,就會少比較一次,因為每進行一趟排序都會找出一個較大值。如上例:第一趟比較之后,排在最后的一個數一定是大的一個數,第二趟排序的時候,只需要比較除了最后一個數以外的其他的數,同樣也能找出一個大的數排在參與第二趟比較的數后面,第三趟比較的時候,只需要比較除了最后兩個數以外的其他的數,以此類推……也就是說,每進行一趟比較,每一趟少比較一次。
冒泡排序的代碼:
#includevoid Swap(int* x, int* y)
{int tmp = *x;
*x = *y;
*y = tmp;
}
void BubbleSort(int* arr, int sz)
{for (int i = 0; i< sz; i++)
{for (int j = 0; j< sz - 1 - i; j++)
{ if (arr[j] >arr[j + 1])
{ Swap(&arr[j], &arr[j+1]);
}
}
}
}
int main()
{int arr[10] = {1,3,5,7,9,2,4,6,8,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
BubbleSort(arr,sz);
return 0;
}
冒泡排序改進版但是呢冒泡排序有一個弊端:假設數組是這樣一組數int arr[5]={5,1,2,3,4};
其實第一輪冒泡排序結束數組就已經排序完成,但是冒泡排序還是會一直進行第二趟冒泡排序,第三趟冒泡排序,第四趟冒泡排序,浪費時間。所以可以對冒泡排序進行優化。
#includevoid Swap(int* x, int* y)
{int tmp = *x;
*x = *y;
*y = tmp;
}
int flag = 0;
void BubbleSort(int* arr, int sz)
{for (int i = 0; i< sz-1&&flag==0; i++)
{int flag = 1;
for (int j = 0; j< sz - 1 - i; j++)
{ if (arr[j] >arr[j + 1])
{ Swap(&arr[j], &arr[j+1]);
flag = 0;
}
}
}
}
int main()
{int arr[10] = {1,3,5,7,9,2,4,6,8,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
BubbleSort(arr,sz);
return 0;
}
簡單來說:當完成了第n趟冒泡排序后再進行第n+1趟時發現前面一個數都是小于后一個數,那么if內的語句不在執行flag=1,冒泡排序不在往后執行程序結束。
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
分享題目:C語言冒泡排序改進版-創新互聯
當前鏈接:http://www.2m8n56k.cn/article10/cedddo.html
成都網站建設公司_創新互聯,為您提供定制開發、搜索引擎優化、網站維護、網站設計、企業建站、外貿建站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯