/**
排序方式
插入排序:直接插入排序
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...