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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

疯子的算法总结(六) 简单排序总 选择排序+插入排序+比较排序+冒泡排序

發(fā)布時間:2023/12/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 疯子的算法总结(六) 简单排序总 选择排序+插入排序+比较排序+冒泡排序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、數(shù)組的排序算法

1.選擇排序

選擇排序是指每次選擇所需排序數(shù)組中的最大值或者最小值(根據(jù)排序方式選擇,從大到小選最大,從小到大選最小),將這個元素與前面沒有進行排序的元素交換。
下面以1 4 2 5 9 6這些亂序元素,來表現(xiàn)排序過程。
第一次排序 9 4 2 5 1 6
第二次排序 9 6 2 5 1 4
第三次排序 9 6 5 2 1 4
第四次排序 9 6 5 4 1 2
第五次排序 9 6 5 4 2 1
用一段程序?qū)崿F(xiàn)以上過程
以由大到小為例

{int i,j; /*定義主函數(shù)局部變量*/int a[6]; /*開設容量為6的數(shù)組用于存入數(shù)據(jù)*/int iTemp; /*定義暫時存儲最值的變量*/int iPos; /*定義用于存儲最值位置的變量*/for(i=0;i<6;i++)cin>>a[i]; /*輸入數(shù)組的值*/for(i=0;i<5;i++) /*當剩余一個元素時循環(huán)即可停止,最后一個元素必定為最值*/{iTemp=a[i]; /*假設最值為第i個元素,開始時假設為第一個元素,0#位置*/iPos=i; /*最值位置為i*/for(j=i+1;j<6;j++) /*從最值的下一個元素開始循環(huán),直到找到一個值比最大值還大的值*/{if(iTemp<a[j]) /*當找到那個值時*/{iTemp=a[j];/*重新記錄最小值*/iPos=j; /*記錄最值位置為*/}}a[iPos]=a[i];a[i]=iTemp; /*交換最大最小值*/} for(i=0;i<6;i++)cout<<a[i]; /*輸出數(shù)組的值*/return 0; }

2.冒泡排序法

冒泡排序法是指在排序是比較相鄰兩個元素的數(shù)值,換位置(從大到小,大在前。從小到大,小在前。)下面仍以1 4 2 5 9 6這些亂序元素為例
以由大到小排序
第一排序過程 sec1 ?????? 4 1 2 5 9 6 (1/4比較)
??????????????????????sec2????????4 2 1 5 9 6 (1/2比較)
??????????????????????sec3????????4 2 5 1 9 6 (1/5比較)
??????????????????????sec4????????4 2 5 9 1 6 ??(1/9比較)
??????????????????????sec5????????4 2 5 9 6 1 (1/6比較)
第二排序過程sec1 ?????? 4 2 5 9 6 1 (4/2比較)
??????????????????????sec2????????4 5 2 9 6 1(2/5比較)
??????????????????????sec3????????4 5 9 2 6 1 (2/9比較)
??????????????????????sec4????????4 5 9 6 2 1 ??(6/9比較)
??????????????????????sec5????????4 5 9 6 2 1 (2/1比較)
第三排序過程:5 9 6 4 2 1(中間過程略)
第四排序過程:9 6 5 4 2 1(中間過程略)
第五排序過程:9 6 5 4 2 1(中間過程略)
雖然這個過程在四過程時就已經(jīng)完成,這是針對特殊情況,一般情況要進行n-1此過程才能完全排序。
用程序?qū)崿F(xiàn)上述過程

{int i,j;int iTemp;int a[6];for(i=0;i<6;i++)cin>>a[i];for(int i=0;i<5;i++){for(int j=0;j<5;j++){ if(a[j]<a[j+1]) /*比較相鄰元素的值*/{iTemp=a[j+1]; a[j+1]=a[j];a[j]=iTemp; /*交換相鄰元素的值*/}}}for(i=0;i<6;i++)cout<<a[i];return 0; }

3.交換排序法

交換排序法,將每一位數(shù)于后邊的數(shù)一一比較,如果發(fā)現(xiàn)符合交換條件的元素就進行交換;下面仍以下面仍以1 4 2 5 9 6這些亂序元素為例
以由大到小排序
第一次排序 1與4比較,1小于4交換4 1 2 5 9 6。4與2比較,4大于2繼續(xù)。4與5比較,4小于5,交換5 1 2 4 9 6。5與9比較,5小于9,交換9 1 2 4 5 6。9與6比較,9大于6繼續(xù)。
第二次排序 1與2比較,1小于2,交換9 2 1 4 5 6。2與4比較,2小于4交換9 4 1 2 5 6。4與5比較,4小于5,交換9 5 1 2 4 6。5與6比較,5小于6,交換9 6 1 2 4 5 。
第三次排序 9 6 5 1 2 4
第四次排序 9 6 5 4 1 2
第五次排序 9 6 5 4 2 1
用程序?qū)崿F(xiàn)

{int i,j;int iTemp;int a[6];for(i=0;i<6;i++)cin>>a[i];for(i=0;i<5;i++){for(j=i+1;j<6;j++){if(a[i]<a[j]) /*尋找符合條件的值*/{iTemp=a[j];a[j]=a[i]; a[i]=iTemp; /*交換*/}}}for(i=0;i<6;i++)cout<<a[i];return 0; }

4.插入排序法

插入排序法相對較為復雜,從數(shù)組中抽出一個是在前面的數(shù)據(jù)中選擇合適的位置插入。
下面仍以下面仍以1 4 2 5 9 6這些亂序元素為例
以由大到小排序
第一次 取出1放在第一個位置 1
第二次 取出4,跟1比較大小,大于1放在1前面。 4 1
第三次取出2,跟1比較大小,比1大,則再跟4比較大小。小于4,插入。 4 2 1
第四次取出5,跟1比較大小,大于1,則再跟前一元素2比較,大于2,則再跟前一元素4比較,大于4,插入。5 4 2 1
第五次 9 5 4 2 1
第六次9 6 5 4 2 1
用程序?qū)崿F(xiàn)上述過程

{int i,j;int iTemp;int iPos;int a[6];for(i=0;i<6;i++)cin>>a[i];for(i=1;i<6;i++){iTemp=a[i]; /*抽出要插入的值*/iPos=i-1;while(iPos>=0&&iTemp>a[iPos]){a[iPos+1]=a[iPos]; /*不符合條件i前的元素后移一位*/ iPos--; }a[iPos+1]=iTemp; /*找到插入位置插入*/}for(i=0;i<6;i++)cout<<a[i];return 0; }

總結(jié)

以上是生活随笔為你收集整理的疯子的算法总结(六) 简单排序总 选择排序+插入排序+比较排序+冒泡排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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