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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

冒泡、选择、插入法排序详解

發布時間:2023/12/19 综合教程 18 生活家
生活随笔 收集整理的這篇文章主要介紹了 冒泡、选择、插入法排序详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

冒泡法排序

冒泡法排序,見名思義,就是像吐泡泡一樣,一個個泡泡按照應有的順序吐到水面上,直至排序完成。

算法詳解

對數組中的元素從前到后進行兩兩比較交換(0和1,1和2,2和3,...n-1和n),每次完成這樣的一種操作,根據具體的條件,最大值或最小值已被挪至最后元素,根據n-1次循環完成對數組排序。

算法代碼

//冒泡法排序,本例按照升序進行排序
void bubbleSort(int a[], int n)
{
	printf("
冒泡法排序:
");
	int temp = 0;
	for(int i = 1; i < n; i++)		//需進行n-1次排序
	{
		for(int j = 0; j < n - i; j++)//每次循環完畢最大值已挪至最后元素 (n-i)
		{
			if(a[j] > a[j+1])	//兩兩比較,若前數比后面數大,則進行交換
			{
				temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;
			}
		}
	}
}

算法詳細排序演示

輸入數組數據: 3 6 0 1 4 5 9 7 8 2

第1次: 3 0 1 4 5 6 7 8 2 '9'		//第一次循環排序已將最大值排至最后位置
第2次: 0 1 3 4 5 6 7 2 '8' 9		//依此類推,直至排序完成
第3次: 0 1 3 4 5 6 2 '7' 8 9
第4次: 0 1 3 4 5 2 '6' 7 8 9
第5次: 0 1 3 4 2 '5' 6 7 8 9
第6次: 0 1 3 2 '4' 5 6 7 8 9
第7次: 0 1 2 '3' 4 5 6 7 8 9		//到此實際排序已完成
第8次: 0 1 '2' 3 4 5 6 7 8 9
第9次: 0 '1' 2 3 4 5 6 7 8 9		//程序執行完畢,排序完成

選擇法排序

選擇法排序,即選擇性進行排序,根據特定情況對某個位置數據進行選擇最值。

算法詳解

選擇法排序,即選擇性進行排序,為每個位置選擇最值進行交換插入,即(數組第1個元素分別和第2、3、... 、n)進行比較,采用打擂臺的方式,將最值替換至第1位,再次循環即(第2個元素和3、4、.... 、n)比較,插入次值,也是通過n-1次循環完成排序。

算法代碼

//選擇法排序
void selectSort(int a[], int n)
{
	printf("
選擇法排序:
");
	int temp = 0;
	for(int i = 0; i < n - 1; i++)	//需進行n-1次排序
	{
		for(int j = i + 1; j < n; j++)//每次循環將最小值挪至i的位置下標 
		{
			if(a[i] > a[j])		//進行兩兩比較,第i個下標位置的值為最小值
			{
				temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}
		}
	}
}

算法詳細排序演示

輸入數組數據: 3 6 0 1 4 5 9 7 8 2

第0次: '0' 6 3 1 4 5 9 7 8 2		//第一次循環排序已將最小值排至最前位置
第1次: 0 '1' 6 3 4 5 9 7 8 2		//依次類推,選擇性的將最小值放置指定位置
第2次: 0 1 '2' 6 4 5 9 7 8 3
第3次: 0 1 2 '3' 6 5 9 7 8 4
第4次: 0 1 2 3 '4' 6 9 7 8 5
第5次: 0 1 2 3 4 '5' 9 7 8 6
第6次: 0 1 2 3 4 5 '6' 9 8 7
第7次: 0 1 2 3 4 5 6 '7' 9 8
第8次: 0 1 2 3 4 5 6 7 '8' 9		//排序完成

插入法排序

插入法排序,哈哈,這是我在數據結構中新學習的較為簡單的排序方法,即向有序數組中進行插入,放置正確位置的一種排序方法。

算法詳解

插入法排序,即向有序序列中找到合理位置進行插入數據,從而實現從第一個元素到最后元素全部插入完成排序的過程。第一次外層循環i為1即待插入數據的下標(第二個數據),內層循環j從i的位置開始,使之與前邊的數據一一比較,如果小于就交換插入,直至插入到合適的位置,通過n-1次循環將全部數據插入有序序列,完成排序。

算法代碼

//插入法排序
void insertionSort(int a[], int n)
{
	printf("
插入法排序:
");
	int temp = 0;
	for(int i = 1; i < n; i++)	//通過n-1次循環將全部數據完成插入
	{
		for(int j = i; j > 0; j--)//每次循環將下標為i的數據從后向前成功插入有序序列 
		{
			if(a[j] < a[j-1])		//若后邊數據比前邊數據就進行交換插入
			{
				temp = a[j];
				a[j] = a[j-1];
				a[j-1] = temp;	
			}
		}
	}	
} 

算法詳細排序演示

輸入數組數據: 3 6 0 1 4 5 9 7 8 2

第1次: '3 6' 0 1 4 5 9 7 8 2		//將6插入有序序列(3)中,此時完成插入
第2次: '0 3 6' 1 4 5 9 7 8 2		//將3插入有序序列中(3,6)中,此時完成插入
第3次: '0 1 3 6' 4 5 9 7 8 2		//將1插入有序序列中(0,3,6)中,此時完成插入
第4次: '0 1 3 4 6' 5 9 7 8 2		//將4插入有序序列中(0,1,3,6)中,此時完成插入
第5次: '0 1 3 4 5 6' 9 7 8 2		//依次類推,直至排序完成
第6次: '0 1 3 4 5 6 9' 7 8 2
第7次: '0 1 3 4 5 6 7 9' 8 2
第8次: '0 1 3 4 5 6 7 8 9' 2
第9次: '0 1 2 3 4 5 6 7 8 9'

總結

哈哈,對數組的排序有好多方法,我在此介紹的是比較簡單且常用的排序方法,當然啦,這些排序方法仍然可以改進修改,更加提高時間復雜度,增加排序效率。如果有小伙伴對此仍有疑慮或有改進的方法,歡迎評論留言,我看到會第一時間回復大家的,哈哈,加油沖沖沖!

總結

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

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