void quickSort(int a[], int low, int high){
if(low < high){
int privotLoc = partition(a, low, high); //将表一分为二
quickSort(a, low, privotLoc -1); //递归对低子表递归排序
quickSort(a, privotLoc1, high); //递归对高子表递归排序
}
}
int main{
int a[10] = {3,1,5,7,2,4,9,6,10,8};
cout<<"初始值:";
print(a,10);
quickSort(a,0,9);
cout<<"结果:";
print(a,10);
}
七、归并排序(Merge Sort)
算法思想:
归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法 。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用 。
算法步骤:
- 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;
- 设定两个指针,最初位置分别为两个已经排序序列的起始位置;
- 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;
- 重复步骤3直到某一指针达到序列尾;
- 将另一序列剩下的所有元素直接复制到合并序列尾 。
void print(int a[], int n){
for(int j= 0; j cout< }
cout<}
//将r[i…m]和r[m1 …n]归并到辅助数组rf[i…n]
void Merge(ElemType *r,ElemType *rf, int i, int m, int n)
{
int j,k;
for(j=m 1,k=i; i<=m && j <=n ;k){
if(r[j] < r[i]) rf[k] = r[j];
else rf[k] = r[i];
}
while(i <= m) rf[k] = r[i];
while(j <= n) rf[k] = r[j];
print(rf,n 1);
}
void MergeSort(ElemType *r, ElemType *rf, int lenght)
{
int len = 1;
ElemType *q = r ;
ElemType *tmp ;
while(len < lenght) {
int s = len;
len = 2 * s ;
int i = 0;
while(ilen Merge(q, rf, i, is-1, ilen-1 ); //对等长的两个子表合并
i = ilen;
}
if(is < lenght){
Merge(q, rf, i, is -1, lenght -1); //对不等长的两个子表合并
}
tmp = q; q = rf; rf = tmp; //交换q,rf,以保证下一趟归并时,仍从q 归并到rf
}
}
int main{
int a[10] = {3,1,5,7,2,4,9,6,10,8};
int b[10];
MergeSort(a, b, 10);
print(b,10);
cout<<"结果:";
print(a,10);
}
八、基数排序(Radix Sort)
算法思想:
基数排序:通过序列中各个元素的值,对排序的N个元素进行若干趟的“分配”与“收集”来实现排序 。
分配:我们将L[i]中的元素取出,首先确定其个位上的数字,根据该数字分配到与之序号相同的桶中。
收集:当序列中所有的元素都分配到对应的桶中,再按照顺序依次将桶中的元素收集形成新的一个待排序列L。
对新形成的序列L重复执行分配和收集元素中的十位、百位…直到分配完该序列中的最高位,则排序结束 。
算法代码:
d RadixSort(Node L[],length,maxradix)
{
int m,n,k,lsp;
k=1;m=1;
int temp[10][length-1];
Empty(temp); //清空临时空间
while(k {
for(int i=0;i {
if(L[i] Temp[0][n]=L[i];
else
Lsp=(L[i]/m); //确定关键字
Temp[lsp][n]=L[i];
n;
}
CollectElement(L,Temp); //收集
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- excel合并单元格快捷键是什么
- 我来教你Excel把多个单元格内容合并到一个单元格的操作教程 我来教你跳舞
- 小编教你闪电PDF转换成WORD转换器合并或分割PDF文件的详细操作教程
- 小编教你Excel快速合并两列数据/文本的操作教程 小编教你怎么选:羽毛球拍3U和4U的区别
- 教你excel表格里直接相加来求和的操作方法 Excel表合并
- 笔记本电脑分盘教程 电脑分盘怎么合并
- 小编分享迅捷CAD编辑器把CAD里多个图形合并成块的相关流程 迅捷影视分享码
- 西樵实验小学升学率 佛山市公办小学排名?
- 教你Excel 2019自动排序编号的详细步骤教程
- 金山pdf阅读器如何合并pdf文件,几秒达成