做旅行网站,wordpress学校,网站建设属于哪个行业分类,哈尔滨建工建设有限公司一、链接
1097 排序
二、题目 Description N个整数#xff0c;将其排序输出。 输入 第一行是一个整数K#xff08;1K20#xff09;#xff0c;表示有多少个样例#xff0c;每个样例的第一行是一个整数N#xff08;1N1,000#xff09;和一个字符X将其排序输出。 输入 第一行是一个整数K1K20表示有多少个样例每个样例的第一行是一个整数N1N1,000和一个字符XX为A时表示升序排序为D时为降序排列第二行为N个整数每个整数都可以使用int表示每个之间用一个空格隔开。 输出 每个样例输出一行按排序要求输出整数每个整数之间输出一个空格。最后一个整数后不要有空格 Sample Input 2
3 A
3 5 2
4 D
2 5 7 3Sample Output 2 3 5
7 5 3 2Source ericxie
三、题意
实现两种排序升序排序和降序排序
四、代码
c函数库代码
#includeiostream
#includealgorithmusing namespace std;const int N1e310;int a[N];int main()
{int t;scanf(%d,t);while(t--){int x;char op[2];scanf(%d%s,x,op);for(int i0;ix;i) scanf(%d,a[i]);sort(a,ax);if(op[0]D) reverse(a,ax); for(int i0;ix-1;i) printf(%d ,a[i]);printf(%d,a[x-1]);printf(\n);}return 0;
}
快速排序代码
#includeiostream
#includealgorithmusing namespace std;const int N1e310;int a[N];//快速排序
void quick_sort(int a[],int l,int r)
{if(lr) return;int il-1,jr1,xa[(lr)/2];while(ij){do{i;}while(a[i]x);do{j--;}while(a[j]x);if(ij) swap(a[i],a[j]);}quick_sort(a,l,j);quick_sort(a,j1,r);
}int main()
{int t;scanf(%d,t);while(t--){char op[2];int n;scanf(%d%s,n,op);for(int i0;in;i) scanf(%d,a[i]);quick_sort(a,0,n-1);if(op[0]D) reverse(a,an);for(int i0;in-1;i) printf(%d ,a[i]);printf(%d,a[n-1]);printf(\n);}return 0;
}
归并排序
#includeiostream
#includealgorithmusing namespace std;const int N1e310;int q[N],temp[N];void merge_sort(int q[],int l,int r)
{if(lr) return;int x(lr)/2;merge_sort(q,l,x);merge_sort(q,x1,r);int k0,il,jx1;while(ixjr){if(q[i]q[j]) temp[k]q[i];else temp[k]q[j];}while(ix) temp[k]q[i];while(jr) temp[k]q[j];for(int il,j0;ir;i,j){q[i]temp[j];}
}int main()
{int t;scanf(%d,t);while(t--){int n;char op[2];scanf(%d%s,n,op);for(int i0;in;i) scanf(%d,q[i]);merge_sort(q,0,n-1);if(op[0]D) reverse(q,qn);for(int i0;in-1;i) printf(%d ,q[i]);printf(%d\n,q[n-1]);}return 0;
} c语言冒泡排序
#includestdio.hint a[100010];void up(int a[],int n)
{for(int i0;in;i){for(int ji1;jn;j){if(a[i]a[j]){int temp0;tempa[i];a[i]a[j];a[j]temp;}}}
}void down(int a[],int n)
{for(int i0;in;i){for(int ji1;jn;j){if(a[i]a[j]){int temp0;tempa[i];a[i]a[j];a[j]temp;}}}
}int main()
{int t;scanf(%d,t);while(t--){int n;char op[2];scanf(%d%s,n,op);for(int i0;in;i) scanf(%d,a[i]);if(op[0]A) up(a,n);else down(a,n);for(int i0;in-1;i) printf(%d ,a[i]);printf(%d\n,a[n-1]);}return 0;
} 五、总结
1.快速排序785. 快速排序
2.归并排序787. 归并排序
3.使用c函数库是最简单的方法直接调用sort函数然后翻转一下就是从大到小进行降序排序
4. 冒泡排序自己手动实现swap函数即可非常经典的四个语句
int temp0;
tempa[i];
a[i]a[j];
a[j]temp;
5.只管代码美观的话先进行升序排序条件判断一下如果输入的字符串是D就降序排序最后按照要求输出即可时间复杂度可能会因为把变成原来时间复杂度的常数倍但是其实没什么影响针对做题来说
6.输出有一些问题行尾不能输出空格所以只能先输出到倒数第二个元素然后输出最后一个元素换行
7. 简单来说快速排序是先移动数组元素再递归归并排序是先递归再移动数组元素并且需要使用一个额外的临时数组元素归并排序是两个部分是排好序的把两个排好序的部分存到临时数组里面最后面还要把这个临时数组里面的所有元素存回原来的数组。
8.快速排序是在一个数组里面使用两个指针不断移动和维护
六、精美图片