这周正式进行排序的训练。
学习了c++中的五大基础排序:
1.选择排序
2.冒泡排序
3.桶排序
4.插入排序
5.快速排序
一.
#include<bits/stdc++.h>
using namespace std;
int a[10005];
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n-1;i++){
for(int j=i+1;j<=n;j++){
if(a[i]>a[j]){
swap(a[i],a[j]);
}
}
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
return 0;
}
二.
#include<bits/stdc++.h>
using namespace std;
int a[100];
int main(){
int n;
bool flag;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n-1;i++){
flag=0;
for(int j=1;j<=n-i;j++){
if(a[j]>a[j+1]){
swap(a[j],a[j+1]);
flag=1;
}
}
if(flag==0) break;
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
三.
#include<bits/stdc++.h>
using namespace std;
int a[10005];
const int k=10001;
int main(){
int n,x;
cin>>n;
for(int i=1;i<=n;i++){
cin>>x;
a[x]++;
}
for(int i=0;i<k;i++){
for(int j=a[i];j>0;j--){
cout<<i<<" ";
}
}
return 0;
}
四.
#include<bits/stdc++.h>
using namespace std;
int a[10005];
int main(){
int n,i,j,k,temp;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
for(j=i-1;j>=1;j--){
if(a[j]<a[i]) break;
}
if(j!=i-1){
temp=a[i];
for(k=i-1;k>j;k--){
a[k+1]=a[k];
}
a[k+1]=temp;
}
}
for(i=1;i<=n;i++){
cout<<a[i]<<" ";
}
return 0;
}
五.
#include<bits/stdc++.h>
using namespace std;
int part(int* r, int low, int hight)
{
int i = low, j = hight, point = r[low];
while (i < j)
{
while (i<j && r[j]>point)
{
j--;
}
if (i < j)
{
swap(r[i++], r[j]);
}
while (i < j && r[i] <= point)
{
i++;
}
if (i < j)
{
swap(r[i], r[j--]);
}
}
return i;
}
void Quicksort(int* r, int low, int hight)
{
int mid;
if (low < hight)
{
mid = part(r, low, hight);
Quicksort(r, low, mid - 1);
Quicksort(r, mid+1, hight);
}
}
int main()
{
int a[10001];
int N;
cout << "请输入要排序的数据的个数: " << endl;
cin >> N;
cout << "请输入要排序的数据: " << endl;
for (int i = 0; i < N; i++)
{
cin >> a[i];
}
cout << endl;
Quicksort(a, 0, N - 1);
cout << "排序后的序列为: " << endl;
for (int i = 0; i < N; i++)
{
cout << a[i] << " ";
}
cout << endl;
return 0;
}
这就是五大基础排序的模板了。
接下来通过一些题目来进行更好的理解。
下面是这题的代码:
#include<bits/stdc++.h>
using namespace std;
int a[10005];
int n;
int sum=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];}
sort(a+1,a+1+n);
for(int i=1;i<=n;i++){
if(a[i]!=a[i+1])
sum++;}
cout<<sum<<endl;
for(int i=1;i<=n;i++){
if(a[i]!=a[i+1])
cout<<a[i]<<" ";}
return 0;}
正如题意所说,需要进行排序和去重,本题可以使用桶排序或slt大法,不过我在这里选择了sort快速排序。
因为要进行去重,所以在进行sort排序时要加1,接下来当数组中元素和下一个元素不等时,次数加一,然后输出次数。同理输出数组里面的数。到此本题完成。
此上三题不再赘述,本周练习到此为止。。。
拜拜。。。。