1045. 快速排序
来源:互联网 发布:淘宝助理违规验证通过 编辑:程序博客网 时间:2024/05/22 06:52
1045. 快速排序(25)
时间限制
200 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CAO, Peng
著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边。 给定划分后的N个互不相同的正整数的排列,请问有多少个元素可能是划分前选取的主元?
例如给定N = 5, 排列是1、3、2、4、5。则:
因此,有3个元素可能是主元。
输入格式:
输入在第1行中给出一个正整数N(<= 105); 第2行是空格分隔的N个不同的正整数,每个数不超过109。
输出格式:
在第1行中输出有可能是主元的元素个数;在第2行中按递增顺序输出这些元素,其间以1个空格分隔,行末不得有多余空格。
输入样例:51 3 2 4 5输出样例:
31 4 5#include<stdio.h>#include<stdlib.h>int compare(const void *a,const void *b){ return *((int *)a)-*((int *)b);}int main(){ int num[100000],temp[100000],result[100000],*p_result=result,i,j,n; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",num+i); temp[i]=num[i]; } qsort(temp,n,sizeof(int),compare); for(i=0;i<n;i++) { if(temp[i]==num[i]) { *(p_result++)=i; } } for(i=0,j=0;i<n&&j<p_result-result;i++) { if(i<result[j]&&num[i]<num[result[j]]) ; else if(i>=result[j]) j++; else if(num[i]>num[result[j]]) { while(num[i]>num[result[j]]&&j<p_result-result) { result[j]=-1; j++; } } } for(i=0,n=0;i<p_result-result;i++) { if(result[i]>=0) { temp[n++]=num[result[i]]; } } printf("%d\n",n); if(n==0) { printf("\n"); return 0; } for(i=0;i<n-1;i++) printf("%d ",temp[i]); printf("%d\n",temp[i]); return 0;}
#include <stdio.h> //第二个测试点超时 无奈了int cmp(const void *a, const void *b){ return *(int *)a - *(int *)b;}int main(){ int i, j, k = 0, flag, N, flag1 = 0; int Num, Max = 0; int arr1[100000], arr2[100000]; scanf("%d", &N); for (i = 0; i < N; i++) scanf("%d", &arr1[i]); for (i = 0; i < N; i++) { Num = arr1[i]; if (Num > Max) { Max = Num; for (j = i + 1; j < N; j++) { if (Max < arr1[j]) Max = arr1[j]; if (arr1[j] <= Num||flag1==1) { i = j; flag1 = 1; if (Max > arr1[j]) break; } } if (flag1 != 1) { arr2[k] = Num; k++; Max = 0; flag1 = 0; } flag1 = 0; } } if (k == 0) { printf("0\n\n"); return 0; } printf("%d\n", k); qsort(arr2, k, sizeof(arr2[0]), cmp); for (i = 0; i < k; i++) { if (i == 0) printf("%d", arr2[i]); else printf(" %d", arr2[i]); }}
0 0
- 1045. 快速排序(25)
- 1045. 快速排序(25)
- 1045. 快速排序(25)
- 1045. 快速排序(25)
- 1045. 快速排序(25)
- 1045. 快速排序
- 1045. 快速排序(25)
- 1045. 快速排序
- 1045. 快速排序(25)
- 1045. 快速排序(25)
- 1045. 快速排序(25)
- 1045. 快速排序(25)
- pat 1045. 快速排序
- 1045. 快速排序(25)
- 1045. 快速排序(25)
- 1045. 快速排序(25)
- 1045. 快速排序(25)
- 1045. 快速排序(25)
- Web自适应
- Fluke45Viewer数据校准工具
- 《程序员修炼之道》笔记(三)
- 基础搜索
- LeakCanary 内存溢出检测工具
- 1045. 快速排序
- 多类 SVM 的损失函数及其梯度计算
- tomcat服务器无法启动或者双击startup.bat一闪而过的原因
- mysql可重复读和幻读实例
- 处理多字节数据转Unicode和 string转char
- 学习笔记
- php中的isset(),empty(),is_null()函数比较总结
- mysql的事务和锁
- How do I fix the GPG error “NO_PUBKEY”?