Sort the array one by one without changing current array

思想:每一次从原来的数组中找出第几个小的数。思路是,每次挑完一个,把这个数存在maxValue里面,表示已经有序的数组里面的最后一个。进行下一轮是,用选择排序法,但是要注意每次都要大于maxValue的选择排序法。


#include<cstdio>

#include<iostream>
#include<iomanip>
using namespace std;


int MAX_N=11;


void swap(int A[],int a,int b){
int temp=A[a];
A[a]=A[b];
A[b]=temp;
}


void copyArray(int A[],int B[],int n){
for(int i=0;i<n;i++){
B[i]=A[i];
}
}


void sortArray1(int sortedA[],int n){
int k;
for(int i=0;i<n-1;i++){
k=i;
for(int j=i+1;j<n;j++){
if(sortedA[j]<sortedA[k]){
k=j;
}
}
if(k!=i){
swap(sortedA,k,i);
}
}
}


void display(int A[],int n){
for(int i=0;i<n;i++){
cout<<setw(6)<<A[i];
}
cout<<endl;
}


void sortArray2(int originalA[],int sortedA[],int n){
// sortedA[0]=originalA[0];
int maxValue=-1000000;
int minValue;
for(int j=0;j<n;j++){
minValue=100000; 
for(int i=0;i<n;i++){
//选出了大于上一次的数的最小的数 
if(originalA[i]<minValue && originalA[i]>maxValue){
minValue=originalA[i];
}
}
sortedA[j]=minValue;
maxValue=sortedA[j];
}
}


int main(){
int n;
int originalA1[MAX_N],originalA2[MAX_N],sortedA1[MAX_N],sortedA2[MAX_N];
cout<<"Input n:";
cin>>n;
cout<<"Input the array:"<<endl;
for(int i=0;i<n;i++){
scanf("%d",&originalA1[i]);
}

copyArray(originalA1,originalA2,n);
display(originalA2,n);

copyArray(originalA1,sortedA1,n);
display(sortedA1,n);

sortArray1(sortedA1,n);
display(sortedA1,n);

sortArray2(originalA2,sortedA2,n);
display(sortedA2,n);
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值