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

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

生活随笔

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

编程问答

各种排序的原理

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

1.選擇排序:

? 首先通過(guò)n-1次關(guān)鍵字比較,從n個(gè)記錄中找出關(guān)鍵字最小的記錄,將它與第一個(gè)記錄交換;

? 再通過(guò)n-2次比較,從剩余的n-1個(gè)記錄中找出關(guān)鍵字次小的記錄,將它與第二個(gè)記錄交換;

? 重復(fù)上述操作,共進(jìn)行n-1趟排序后,排序結(jié)束。

void Selesort(int *Array,int n) {int i,j,k,tmp;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(Array[j]<Array[k]) k=j;if(i!=k){tmp=Array[i];Array[i]=Array[k];Array[k]=tmp;}} }

2.快速排序:


快速排序是對(duì)冒泡排序的一種改進(jìn),其原理是分治法。

設(shè)要排的數(shù)組是a[0],a[1],...a[n-1],首先任選取一個(gè)數(shù)據(jù),通常選取第一個(gè)數(shù)據(jù)作為關(guān)鍵數(shù)據(jù),然后將所有比它小的

數(shù)都放到它前面,所有比它大的數(shù)都放到它后面,這個(gè)過(guò)程稱為一趟快速排序。

一趟快速排序的算法是:

(1)設(shè)置兩個(gè)變量i,j,排序開始的時(shí)候:i=0,j=n-1

(2)以第一個(gè)數(shù)據(jù)作為關(guān)鍵數(shù)據(jù)賦值給key,即key=a[0]

(3)從j開始向前搜索,即由后開始向前搜索(j=j-1),找到第一個(gè)小于key的值a[j],并與a[i]交換

(4)從i開始向后搜索,即由前向后搜索(i=i+1),找到第一個(gè)大于key的值a[i],與a[j]交換

(5)重復(fù)(3)(4)(5)步,直到i=j;

void QuickSort(int *Array,int x,int y) {int key=Array[x];int i=x,j=y;if(i>=j) return;while(i<j){while(i<j&&a[j]>=key) j--;Array[i]=Array[j];while(i<j&&Array[i]<=key) i++;Array[j]=Array[i];}Array[j]=key;QuickSort(Array,x,j-1);QuickSort(Array,j+1,y); } 3.歸并排序:
   

歸并(Merge)排序法是將兩個(gè)(或兩個(gè)以上)有序表合并成一個(gè)新的有序表,即把待排序序列分為若干個(gè)子序列,每個(gè)子

序列是有序的。然后再把有序子序列合并為整體有序序列。歸并操作的工作原理如下:


第一步:申請(qǐng)空間,使其大小為兩個(gè)已經(jīng)排序序列之和,該空間用來(lái)存放合并后的序列

第二步:設(shè)定兩個(gè)指針,最初位置分別為兩個(gè)已經(jīng)排序序列的起始位置

第三步:比較兩個(gè)指針?biāo)赶虻脑?#xff0c;選擇相對(duì)小的元素放入到合并空間,并移動(dòng)指針到下一位置

重復(fù)步驟3直到某一指針達(dá)到序列尾,將另一序列剩下的所有元素直接復(fù)制到合并序列尾

// 原數(shù)組Array,臨時(shí)空間數(shù)組tmp void merge(int low,int mid,int high) {int i=low,j=mid+1,k=low;while(i<=mid&&j<=high){//此處為排序順序的關(guān)鍵,用小于表示從小到大排序if(Array[i]<=Array[j]) tmp[k++]=Array[i++];else tmp[k++]=Array[j++];}while(i<=mid) tmp[k++]=Array[i++];while(j<=high) tmp[k++]=Array[j++];for(i=low;i<=high;i++) //寫回原數(shù)組Array[i]=tmp[i]; }/**全部排序的調(diào)用為mergeSort(0,4) */ void mergeSort(int a,int b) {if(a<b){int mid=(a+b)/2;mergeSort(a,mid);mergeSort(mid+1,b);merge(a,mid,b);} }

總結(jié)

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

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