快速排序:是目前基於比較的內部排序中被認為是最好的方法,當待排序的關鍵字是隨機分布時,快速排序的平均時間最短;
當n較大,
則應採用時間複雜度為
o(nlog2n)
的排序方法:快速排序、堆排序或歸併排序序。
公升序(先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。)
如:假設前n個數是有序的,需要插入第n+1個數,儲存第n+1個數為tmp。然後從第n個數開始tmp比較,如果tmp大,第n+1個數替換成第n個數,依次往前替換,直到那個數小於所儲存的數,那這個位置就插入這個儲存的數
void insertsort(datatype *a,size_t n)//插入排序
a[end+1]=tmp;
}}
1.預排序 2.插入排序
希爾排序我們不在是一步一步的操作元素,採用跳躍式分組的排序。
設定乙個增量gap=length/3+1;若gap=3時則每次遞增3的排序如a[0],a[3],a[6]....進行預排序讓序列盡可能有序。
void xiersort(datatype *a,int n)//希爾排序
a[end+gap]=tmp;
} }}
void swap(datatype *x1,datatype *x2)//交換函式
定義倆個指標,遍歷一遍陣列倆指標乙個從左開始,乙個從右開始。選取最大的元素與最小的元素,放在合適的位置上。
void selectsort(datatype *a,int n)//選擇排序
if (a[i]a[j+1])
}if (flag==0)}}
既然是堆排序,首先要建立堆,如果想排成公升序,則需要調整成大堆,反之為小堆。
建立成大堆後開始排序,取堆頂元素也就是最大的元素放在陣列的最後面,然後重新調整大堆,數量減一。迴圈直到數量大於1.
void adjustdown(datatype *a,size_t n,size_t root)//堆排序用到的向下調整
if (a[parent]=0;i--)
int end=n-1;
while (end>0)
}
挖坑法基本思路:1、尋找div位,然後將其分為兩段陣列,然後對這兩段陣列遞迴排序;2、儲存最右邊的數為key,定義兩個指標begin乙個指向起始位置,end乙個指向最後乙個元素的位置。begin尋找比key大的數字,找到 後將begin的資料賦給end,begin成為乙個坑,然後end尋找key小的數字,找到將end的資料賦給begin,end成為乙個新坑,迴圈這個過程,直到begin指標與end指標相遇,然後將key返回給那個坑,然後進行遞迴操作。
int partsort2(datatype *a,int left,int right)//快速排序 挖坑法 (方法2)
//挖坑法基本思路:1、尋找pos位,然後將其分為兩段陣列,然後對這兩段陣列遞迴排序;2、儲存最右邊的數為key,定義兩個指標begin乙個指向起始位置,end乙個指向最後乙個元素的位置。begin尋找比key大的數字,找到 後將begin的資料賦給end,begin成為乙個坑,然後end尋找key小的數字,找到將end的資料賦給begin,end成為乙個新坑,迴圈這個過程,直到begin指標與end指標相遇,然後將key返回給那個坑,然後進行遞迴操作。
int div=partsort2(a,left,right);
quitsotr(a,left,div-1);
quitsotr(a,div+1,right);
}
定義兩個指標,一前一後,前面指標找比基數小的數,後面指標找比基數大的數,前面的指標找到後,將前後指標所指向的資料交換,當前面的指標遍歷完整個陣列時,將基數值與後指標的後乙個位置的資料進行交換,然後以後指標的後乙個位置作為分界,然後將陣列分開,進行遞迴排序。
int partsort3(datatype *a,int left,int right)//快速排序 前後指標法 (方法3)
int div=partsort3(a,left,right);
quitsotr(a,left,div-1);
quitsotr(a,div+1,right);
}
int partsort(datatype *a,int left,int right)//快速排序,左右指標法( 方法一 )
WPF Image問題解決方法
一.image是控制項,source屬性型別是imagesource 二.imagebrush是筆刷,用於填充 1.基本使用,必須指定imagesource源 imagebrush繼承自tilebrush,imagebrush功能比較強大 三.imagedrawing繼承自drawing,用於繪圖 ...
SeLinux問題解決方法
selinux問題解決方法 3 關於以上修改,google提供的解決方案如下 3.1 如果乙個檔案只是被vendor下的程序使用,可以將此檔案設為vendor data file,存放於 data vendor目錄下 3.2 如果乙個檔案既被system下的程序也被vendor下的程序使用,並且是a...
JSP亂碼問題解決方法
1 在jsp每頁的開頭處寫 page contenttype text html charset gb2312 一定有,而且要在檔案首行 不能在include檔案中 2 讀取資料庫內容時出現的亂碼可以轉換一下 out.println new string rs.getstring 1 getbyte...