常用的排序演算法

2021-06-05 14:13:19 字數 3024 閱讀 7647

/**

排序方式

插入排序:直接插入排序

shell排序

選擇排序:直接選擇排序

堆排序交換排序:氣泡排序

快速排序

歸併排序

分配和索引排序:基數排序

桶式排序

*/#include using namespace std;

//直接插入排序 arr為待排陣列,n為陣列長度

void insertsort(int arr,int n)

//最後把值賦給該值的適當位置

arr[j + 1] = temp;

}}//shell排序

/**演算法思想:先將待排序列分為若干個子串行,而且要保證子串行中的記錄在原始資料中

不相鄰,且間距相同,分別對這些小子序列進行插入排序;然後減少記錄之間的間距,

減少小子序列的個數,將原始序列分為更大的更有序的序列分別進行插入排序,重複進行

直到最後的間距減少為1

*///首先定義乙個下面用到的函式 交換陣列中的兩個元素

void swap(int arr,int m,int n)

//子串行的排序

void modinsertsort(int arr,int n,int delta)

}}/**

例項分析:(只是分解 沒有排序 理應在每次分解完成後進行排序)

序列 45 34 78 12 34 32 29 64

d=4 i=0 45 34

i=1 34 32

i=3 78 29

i=4 12 64

d=2 i=0 45 78 34 29

d=1 45 34 78 12 34 32 29 64

直到d為1

*/void shellsort(int arr,int n)

}}//直接選擇排序

//依次選擇第i最小的元素放到i位置

void slectsort(int arr,int n)

}swap(arr,i,min);

}}//堆排序的思想是最小堆

/**偽碼:

void heapsort(int arr,int n)}*/

//氣泡排序

void bubblesort(int arr,int n)

}if(noswap) return;

}}//快速排序

/**演算法思想:

1.從待排序列s中任意選擇乙個記錄k作為軸值(pivot)

2.將剩餘的記錄分割成(partition)成左子列l和右子列r

3.l中元素都小於或者等於k,r中記錄都大於等於k,因此k正好處於正確的位置

4.對子序列l和r遞迴進行快速排序,直到子串行中含有0或者1個元素

*///分割函式

//快速排序的實現

int selectpivot(int left,int right)

//int partition(int arr,int left,int right)

//在l子串行中遇到比軸大的元素

if(l < r)

//如果在r子串行中遇到比軸值大的數,不用管 繼續向下尋找

while(arr[r] >= temp && r > l)

//在r中遇到了比軸值小的數,交換

if(l < r)

}arr[l] = temp;

return l;//返回軸值所在的索引

}void quicksort(int arr , int left,int right)

//歸併排序

/**演算法思想:

1.將序列劃分為兩個子串行

2.分別對兩個子串行遞迴進行歸併排序

3.將這兩個已經排好的子串行合併為乙個有序序列,即歸併過程

*///歸併到新陣列

void merge(int arr ,int temp ,int left,int right,int middle)

index1 = left;

index2 = middle + 1;

i = left;

while(index1 <= middle && index2 <= right)

while(index1 <= middle)

arr[i ++] = temp[index1 ++];

while(index2 <= right)

arr[i ++] = temp[index2 ++];

}void mergesort(int arr,int temp,int left,int right)

}//桶式排序

/**//桶式排序,array為待排序陣列,陣列長度為n,所有記錄都位於區間[0,max)上

template void bucketsorter::sort(record array, int n,int max)

*///基數排序

/**template class radixsorter:public sorter;

//陣列實現的基數排序,n為陣列長度,d為排序碼個數,r為基數

template void radixsorter::sort(record array, int n,int d, int r)

for (j=0; jarray[j] = temparray[j];

radix*=r; }}

*/int main()

; int temp[7]=;

//insertsort(arr,7);

//shellsort(arr,7);

//slectsort(arr,7);

//bubblesort(arr,7);

//quicksort(arr,0,7);

mergesort(arr,temp,0,6);

for(int i = 0 ; i < 7 ; i++)

return 0;

}

常用的排序演算法

1.氣泡排序 private static void bubblesort int a 列印氣泡排序的結果 for int i 0 i2.快速排序 public class quicksort qs.data data qs.sort 0,qs.data.length 1 qs.display 3....

常用的排序演算法

1.氣泡排序 時間複雜度 o n 2 氣泡排序演算法的運作如下 從後往前 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上...

常用的排序演算法

常用的排序演算法 氣泡排序 思路 從第0個到第n個,和相鄰的元素進行相比,如果比相鄰的大的話,那麼就交換二者順序,這樣的話0到n範圍內的最大的數就放到n的位置。接著下一次操作,第0個到第n 1個,將0到n 1範圍內的最大值放到n 1。重複執行,最後陣列從小到大排列。public static voi...