杭电ACM 2020:绝对值排序
2015-05-04 18:54
267 查看
原创作品 转载请注明出处 /article/10717370.html
这个问题主要难点在于排序,排序有好多种算法,在一般情况下使用快速排序效果比较好。我的算法就是使用这个排序算法。这个算法,我在代码注释得很清楚,看看代码就应该很容易就明白了。程序里面用到了一个绝对值函数labs(),把头文件包含进来调用即可。我的AC代码如下:
这个问题主要难点在于排序,排序有好多种算法,在一般情况下使用快速排序效果比较好。我的算法就是使用这个排序算法。这个算法,我在代码注释得很清楚,看看代码就应该很容易就明白了。程序里面用到了一个绝对值函数labs(),把头文件包含进来调用即可。我的AC代码如下:
#include <iostream> #include<math.h> #include<stdlib.h> using namespace std; void quickSort(int*p,int l,int r)//对从p[l]到p[r]的元素进行排序 { int labs_temp,temp; int i=l,j=r; if(l<r) { //将p[l]元素作为枢轴,labs_temp保存p[l]取绝对值后的数 //temp保存p[l] labs_temp=labs(p[l]); temp=p[l]; /*下边这个循环完成了一趟排序,即将数组中小于labs_temp的元素放在左边, 大于labs_temp的元素放在右边*/ while(i!=j) { while(j>i&&labs(p[j])>labs_temp) --j;//从右往左扫描找到一个小于labs_temp的元素 if(i<j) { p[i]=p[j];//放在labs_temp左边 ++i;//i指针右移 } while(i<j&&labs(p[i])<labs_temp) ++i;//从左边往右边扫描,找到一个大于labs_temp的元素 if(i<j) { p[j]=p[i];//放在labs_temp的右边 --j;//j左移一位 } } p[i]=temp;//将temp放在最终位置 quickSort(p,l,i-1);//递归的对temp左边元素进行排序 quickSort(p,i+1,r);//递归的对temp右边元素进行排序 } } int main(void) { int n,*input_str; while(cin>>n&&n) { //分配输入数据的空间 input_str=new int ; for(int i=0; i<n; i++) cin>>input_str[i]; //调用上面的快速排序算法进行内部排序 quickSort(input_str,0,n-1); //因为要从大到小的顺序输出,所以反向输出 for(int j=n-1; j>=0; j--) { if(j==0) cout<<input_str[j]<<endl; else cout<<input_str[j]<<" "; } //释放空间 delete input_str; } return 0; }
相关文章推荐
- ACM杭电2020绝对值排序
- 杭电ACM 2020 绝对值排序
- 杭电ACM--HDU-2020绝对值排序
- 杭电ACM----2020 绝对值排序
- 杭电 acm 2020 绝对值排序
- 杭电ACM 2020 绝对值排序
- 杭电ACM 2020 绝对值排序
- 杭电ACM 2020绝对值排序----20140728
- 【ACM】hdu_2020_绝对值排序_201308050929
- 杭电2020 绝对值排序
- 杭电 2020 绝对值排序
- hdu2020&杭电oj_2020(绝对值排序)
- 【杭电-oj】-2020-绝对值排序(冒泡排序注意第二个for ,负数变正数但原变量值不变可先平方)
- 绝对值排序(杭电2020)
- HDU_ACM-2020 绝对值排序
- 【杭电】[2020]绝对值排序
- 杭电oj 2020 绝对值排序
- 【杭电oj2020】绝对值排序
- 杭电 2020 ( 绝对值排序 ) java
- 杭电 2020 绝对值排序