主要学习内容是来自浙江大学的数据结构的学习,感兴趣的可以自己去看一下哦~
我们今天学习的算法是快速排序
其时间复杂度是 o(nlogn)o(nlogn)o(nlogn)的调整序列中元素的位置,对于序列中元素的指标并没有统一的规定,一般以A[1]A[1]A[1]作为基准进行排序,使得A[1]A[1]A[1]左侧所有元素不超过A[1]A[1]A[1],右侧所有元素大于A[1]A[1]A[1]
① 调整序列中的元素,使得当前序列最左端的元素调整后满足左侧所有元素均不超过该元素,右侧所有元素均大于该元素
②对该元素的左右两侧分别进行递归 ①的调整,直到当前调整区间的长度不超过1
在一个乱序的数组当中找到一个值放入到temp当中,让后使用leftleftleft和rightrightright两个指针进行分析


temp,并令下标left,right分别指向序列的首位right指向的元素A[right]A[right]A[right]大于temp,就将right左移(right++),当某个时候A[right]≤tempA[right]\le tempA[right]≤temp 时,将元素A[right]A[right]A[right]挪到left指向的元素A[left]A[left]A[left]left指向的元素A[left]A[left]A[left]不超过temp,就将left右移(left–),当某个时候A[left]≥tempA[left] \ge tempA[left]≥temp 时,将元素A[left]A[left]A[left]挪到right指向的元素A[right]A[right]A[right]left和right相遇,把temp当存储的值放到两个指针相遇的地方利用快速排序算法将读入的 NNN 个数从小到大排序后输出。
快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++ 选手请不要试图使用 STL,虽然你可以使用 sort 一遍过,但是你并没有掌握快速排序算法的精髓。)
第 111 行为一个正整数 NNN,第 222 行包含 NNN 个空格隔开的正整数 aia_iai,为你需要进行排序的数,数据保证了 aia_iai 不超过 10910^9109。
将给定的 NNN 个数从小到大输出,数之间空格隔开,行末换行且无空格。
5
4 2 4 5 1
1 2 4 4 5
对于 20%20\%20% 的数据,有 N≤103N\leq 10^3N≤103;
对于 100%100\%100% 的数据,有 N≤105N\leq 10^5N≤105。
#include
using namespace std;const int N=100010;
int q[N];
int n;
void quick_sort(int q[],int l,int r)
{if(l>=r)return ;int i=l-1,j=r+1,x=q[(l+r)>>1];while(ido i++;while(q[i]x);if(iscanf("%d",&n);for(int i=0;i
现有 nnn 个正整数,要求出这 nnn 个正整数中的第 kkk 个最小整数(相同大小的整数只计算一次)。
第一行为 nnn 和 kkk; 第二行开始为 nnn 个正整数的值,整数间用空格隔开。
第kkk个最小整数的值;若无解,则输出 NO RESULT。
10 3
1 3 3 7 2 5 1 2 4 6
3
n≤10000n \leq 10000n≤10000,k≤1000k \leq 1000k≤1000,正整数均小于 300003000030000。
#include
using namespace std;
const int N=100010;
int q[N];
int n,k,y;
void del(int q[])//删除重复数值
{for(int i=1;i<=n;++i){for(int j=i+1;j<=n;++j){if(q[i]==q[j]){for(int y=j;yq[y]=q[y+1];}n--;j--;}}}
}
void quick_sort(int q[],int l,int r)
{ if(l>=r)return ;int i=l-1,j=r+1,x=q[(l+r)>>1];while(ido i++;while(q[i]x);if(iscanf("%d %d",&n,&k);for(int i=1;i<=n;++i)scanf("%d",&q[i]);del(q);quick_sort(q,1,n);//for(int i=1;i<=n;++i)if(n>=k)printf("%d",q[k]);else printf("NO RESULT");return 0;
}
今天的学习内容是什么呢?就是我们的今日份学习内容[根据需要进行修改]