#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 100
void swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
int RandomPivot(int p, int r)
{
srand((int)time(NULL));
return (rand()%(r-p+1) + p); //返回一个p,r值之间的数
}
int Partition(int *A, int p, int r)
{
int x, i, j;
x = A[r];
i = p - 1;
for(j = p; j < r; j++)
{
if(A[j] <= x)
{
i++;
swap(&A[i],&A[j]);
}
}
swap(&A[i+1],&A[r]);
return i+1;
}
int RandomPartition(int *A, int p, int r)
{
int i;
i = RandomPivot(p,r);
swap(&A[r],&A[i]);
return Partition(A,p,r);
}
void RandomQuickSort(int *A, int p, int r)
{
int q;
if(p < r)
{
q = RandomPartition(A,p,r);
RandomQuickSort(A,p,q-1);
RandomQuickSort(A,q+1,r);
}
}
void PrintResult(int *A, int size)
{
int i;
for(i = 0; i < size; i++)
{
printf("%-2d",A[i]);
}
putchar('\n');
}
int main(void)
{
int i, sum;
int A[SIZE];
printf("输入需排序的元素个数(0-100): ");
scanf("%d",&sum);
printf("请输入%d个元素:\n",sum);
for(i = 0; i < sum; i++)
{
scanf("%d",&A[i]);
}
RandomQuickSort(A,0,sum-1);
printf("排序结果:\n");
PrintResult(A,sum);
}
分享到:
相关推荐
在输入序列个数、排序情况不同的情况下对确定性快速排序与随机化快速排序的比较。比较他们的运行时间,验证是否与理论相符。
最省时间的是确定型算法,其次是随机基准快速排序算法,最后是随机化输入快速排序算法;后面两个算法较之确定型算法要费时的原因是:(1)随机选取基准花费了一些时间,(2)随机化输入是将原来数组打乱花费了一些时间。...
(1)用随机快速排序的方法,对输入的数值以从大到小的顺序进行快速排序。 (2)对随机快速排序和冒泡排序这两种排序方法进行比较,测试其在不同数值大小的情况下算法运行的时间复杂度。 二、 实验要求 快速排序...
快速排序的三种写法及随机主元快速排序时间复杂度是nlgn,
快速排序的随机化版本
1)不做随机化处理的递归实现; 2)采用随机化处理的递归实现; 3)用while循环消除尾递归; 4)用栈模拟递归,并证明所需的栈空间为O(logn); 5) 够小时改用插入排序
可以用递归快速实现排序算法,简洁高效,算法复杂度比较合理
利用python代码实现数据结构的经典算法——快速排序算法。
摘要本通过实验模拟研究了两种快速排序的轴点选取策略(随机取轴点和三元素取中位数选取轴点)的较次数的期望以及差。引在1961年由Tony Hoare发表的快速排序
插入排序、冒泡排序、归并排序、快速排序四种排序方式的C++实现,各写成了一个函数,主函数中可以选择调用那一个。初始化数组时用的是随机种子srand((int)time(0))。在宏中定义数组大小。
二分搜索算法、快速排序,算法分析与设计(完整的代码,结合例题详细解析) 全套资源,求抱走!...3)快速排序算法的性能与划分是否对称有关,设计随机化的快速排序算法解决划分对称性问题,将算法编程实现。
}程序运行结果: 初始数组:79 36 68 39 10 96 59 60 84 21 排序过程:7
算法的平均时间复杂度为O(nlogn)。但是当输入是已经排序的数组...引入这一步来修正原先的快速排序,可得到下面所示的随机化快速排序。新算法只是在区间[low…high]中一致随机地选择一个索引v,并将A[v]和A[low]交换,然
实现确定性和随机化的两种快速排序算法,用实验数据分析算法的时间效率和稳定性。 (对相同的输入,随机算法均要运行多次,并用曲线图和表格的形式比较实验结果)。
主要介绍了Ruby实现的3种快速排序算法,本文给出了快速排序的普通版本、快速排序的随机化版本、快速排序的利用了Ruby的语法糖的随机化版本三个版本,需要的朋友可以参考下
随机化快速排序 双路快速排序 三路快速排序 堆和堆排序 堆的基本存储 ShiftUp ShiftDown 基础堆排序和Heapify 优化的堆排序 索引堆(IndexHeap) 索引堆的优化 二分搜索树 二分查找法(Binary Search) 二分搜索树基础 ...
快速排序我将快速排序编程为练习。 后来,作为奖励,我添加了一个多线程实现。 这并不太难,因为快速排序很容易Paralizable。 最后,作为最近的更新,我将两种实现都随机化了
把非随机化的快排卡到平方级.A Killer Adversary for Quicksort. M. D. MCILROY
选择排序 冒泡排序 插入排序 合并排序 快速排序算法原理及代码实现 不同排序算法时间效率的经验分析方法 验证理论分析与经验分析的一致性 void Init_Random();//数组随机数初始化函数声明 void Show_Array();//展示...