算法学习---关于快速排序,数据呈现基本有序和完全无序时候导致的时间复杂度增n^2的解决方案
来源:互联网 发布:中医古籍数据库公司 编辑:程序博客网 时间:2024/05/29 17:52
前言--------------------经过了一段考研学习,也该是时候准备准备复试或者准备今后的工作面试了,那么对于我之前喜欢暴力解法的初级童鞋来说,在算法学习中其实挺迷茫的,所以就想借助写个博客加深对算法学习的深刻,希望有看到的大神多多指教,嘿嘿,下面直接来代码。
快排中时间复杂度增大解决方案
我们采取随机取主元对每个区间进行大小分隔,其时间复杂度虽然为o(n^2) ,但其对任意输入数据的期望时间复杂度都能达到o(nlogn);
#include<cstdio>
#include<stdlib.h>
#include<time.h>
#include<math.h>
//快速排序 针对有序 反序的 改进的
const int maxn=100;
int a[maxn];
int randPartition(int a[],int left,int right){
void swap(int a,int b);
int p=(round((1.0*rand()/RAND_MAX*(right-left)+left)));
int tmep1=a[left];
a[left]=a[p];
a[p]=tmep1;
int temp=a[left];
while(left<right){
while(left<right && temp<a[right]) --right;
a[left]=a[right];
while(left<right && a[left]<=temp) ++left;
a[right]=a[left];
}
a[left]=temp;
return left;
}
void quickSort(int a[], int left ,int right){
if(left<right){
int mid=randPartition(a,left,right);
quickSort(a,left,mid-1);
quickSort(a,mid+1,right);
}
}
int main(){
srand((unsigned)time(NULL));
printf("please enter the number you want : \n");
int n;
scanf("%d",&n);
printf("you will enter %d numbers : \n",n);
for(int i=0;i<n;++i)
{
scanf("%d",&a[i]);
}
printf("now, i am computing...\n");
quickSort(a,0,n-1);
for(int i=0;i<n;++i){
printf("%d ",a[i]);
if(i!=0 && i%9==0){
printf("\n");
}
}
return 0;
}
- 算法学习---关于快速排序,数据呈现基本有序和完全无序时候导致的时间复杂度增n^2的解决方案
- 有1,2,....一直到n的无序数组,求排序算法,要求时间复杂度为O(n),空间复杂度O(1)
- 有1,2,…,n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),一次只能交换两个数
- 有1,2,....一直到n的无序数组,求排序算法,要求时间复杂度为O(n),空间复杂度O(1)
- 关于基本排序的总结选择排序: 算法是: ①第1趟排序 在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换。 ③第i趟排序 第i趟排序开始时,当前有序区和无序区
- C/C++ | 27-18 n的无序数组,求排序算法,并且要求时间复杂度为O(n)
- 关于快速排序和插入排序最坏时间复杂度为O(nlogn)的算法
- 快速排序算法的时间复杂度为什么是O(NlogN),还有O(N^2)
- 有1,2...一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),时间复杂度为O(1)
- Java练习:时间复杂度为O(n*n)的三大基本排序算法
- 现有1,2……一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度为O(1),使用交换,而且只能交换两个数
- 现有1,2……一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度为O(1),使用交换,而且只能交换两个数
- 数组进行排序,时间复杂度O(N)&&求无序数组的中位数
- O(N)时间复杂度的排序算法-计数排序
- 快速排序的时间复杂度和空间复杂度
- 时间复杂度为O(n)的排序算法--计数算法
- 实现一个排序算法,对0~n-1范围内的n个不重复的无序数组进行排序,时间复杂度为O(n),空间复杂度为O(1)。
- 排序算法的稳定性和时间复杂度
- 判断CPU大小端模式
- 关于看算法导论不懂的时候的思考
- TCP、UDP、IP 协议分析
- HDU 3401 Trade 【DP+单调队列优化】
- 当你在试衣间试衣服,请你务必想起wait()与notify()
- 算法学习---关于快速排序,数据呈现基本有序和完全无序时候导致的时间复杂度增n^2的解决方案
- spark mllib和ml类里面的区别
- MySQL数据库与网页进行数据传递(上)
- first-child first-of-type last-child last-of-type 伪类选择器总结
- 【数据结构】-线性表-链表 熟练度max=2
- MySQL之——重连,连接丢失:The last packet successfully received from the serve
- js addEventListener和attachEvent函数中的this的指向问题及解决方法
- 如何查找bug
- mysql安装过程中报错【Can t connect to mysql server on localhost (10061) 】