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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言冒泡排序(升序)

發(fā)布時(shí)間:2024/8/1 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言冒泡排序(升序) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是冒泡排序:

冒泡排序就是將一組數(shù)據(jù)進(jìn)行排序,首先是從相鄰的兩個(gè)元素比較,大的值放在后面,依次往后操作找出最大值,并放在最后一位。

這里我們舉例

? ? ? ? ? ? ? ? arr[10] = { 9,5,4,3,2,1,0,6,7,,8 };

如第一個(gè)元素9依次比較會(huì)跑到最后一個(gè)位子

在從頭開(kāi)始第二大的元素將跑到倒數(shù)第二個(gè)位置

讓后反復(fù)循環(huán),進(jìn)行排序。


簡(jiǎn)單的冒泡排序:

#include<stdio.h> int main() {int arr[10] = { 9,5,4,3,2,1,0,6,7,8 };int cz = sizeof(arr) / sizeof(arr[0]);int tmp = 0;int i = 0, j = 0;for ( i = 0; i < cz-1 ; i++)//大的比較{for ( j = 0; j < cz - i - 1 ; j++)//小的比較{if (arr[j] > arr[j + 1]){tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}for (int i = 0; i < cz; i++)printf("%d ", arr[i]);return 0; }

冒泡排序改進(jìn)1:

我們發(fā)現(xiàn)如果在某一次小的比較后,已經(jīng)完全成為有序數(shù)組,我們就不必再進(jìn)行下一次大的比較,直接退出循環(huán)即可。

#include<stdio.h> int main() {int arr[10] = { 9,5,4,3,2,1,0,6,7,8 };int cz = sizeof(arr) / sizeof(arr[0]);int tmp = 0;int i = 0, j = 0;int m = 1;for ( i = 0; i < cz-1 ; i++)//大的比較{m = 1;for ( j = 0; j < cz - i - 1 ; j++)//小的比較{if (arr[j] > arr[j + 1]){tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;m = 0;}}if (m){break;}}for (int i = 0; i < cz; i++)printf("%d ", arr[i]);return 0; }

改進(jìn)2:?

我們發(fā)現(xiàn)在進(jìn)行第一次大的比較后,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?arr[10] = { 5,4,3,2,1,0,6,7,8,9 };

數(shù)組的后半部分已經(jīng)有序,我們可以跳過(guò)他們。

逃過(guò)方法:記錄最后改變位置的坐標(biāo),并讓j<這個(gè)坐標(biāo)即可

#define _CRT_SECURE_NO_WARNINGS 1 //改為升序 #include<stdio.h> int main() {int arr[10] = { 9,5,4,3,2,0,1,6,7,8 };int cz = sizeof(arr) / sizeof(arr[0]);int tmp = 0;int i = 0, j = 0;int m = 1;int last_change = cz;for ( i = 0; i < cz-1 ; i++)//大的比較{m = 1;for ( j = 0; (j < cz - i - 1) && ( j < last_change) ; j++)//小的比較{if (arr[j] > arr[j + 1]){tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp; m =0; }} last_change = j + 1;if (m){break;}}for (int i = 0; i < cz; i++)printf("%d ", arr[i]);return 0; }

總結(jié)

以上是生活随笔為你收集整理的C语言冒泡排序(升序)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。