随机快速排序算法
程序员文章站
2024-01-19 13:02:16
...
先贴代码吧,后续再分析:
#include <iostream>
#include <stdlib.h>
using namespace std;
void swap(int &a,int &b){
int temp;
temp=a;
a=b;
b=temp;
}
int partition(int a[],int l,int r){ /*元素划分算法*/
int i = l-1,j = r;
int v = a[r];
// 将 >=v的元素交换到右边区域
//将 <=v的元素交换到左边区域
for(;;){
while(a[++i]<v);
while(v<a[--j]) if(j == l) break;
if(i >= j) break;
swap(a[i],a[j]);
}
swap(a[i],a[r]);
return i;
}
void quickSort(int a[],int l,int r){ /*快速排序算法*/
int i;
if(r <= l) return;
i = partition (a,l,r);
quickSort(a,l,i-1); //对左半段排序
quickSort(a,i+1,r); //对右半段排序
}
int randomi(int l,int r){ /*生成l~r的随机整数*/
return (rand() % (r-l+1))+ l;
}
int randompartition(int a[],int l,int r){ /*随机划分算法*/
int i=randomi(l,r);
swap(a[i],a[l]);
return partition(a,l,r);
}
void randomquicksort(int a[],int l,int r){ /*随机快速排序算法*/
int i;
if(r<=l) return;
i=randompartition(a,l,r);
quickSort(a,l,i-1); //对左半段排序
quickSort(a,i+1,r); //对右半段排序
}
int main(){
int a[9] = {10,5,3,6,22,1,23,9,7};
int i;
printf("排序前:");
for(i=0;i<9;i++){
printf("%d ",a[i]);
}
printf("\n");
randomquicksort(a,0,8); //对数组a[0:8]进行快速排序
printf("排序后:");
for(i=0;i<9;i++){
printf("%d ",a[i]);
}
return 0;
}
上一篇: 一元多项式的存储和其算法运算
下一篇: 纯css实现宽高等比缩放