思想:每一次从原来的数组中找出第几个小的数。思路是,每次挑完一个,把这个数存在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;
}