插入新的数字重新排序
分析:将新的数字与已经排序好的数组中的数字一一比较,直到找到插入点,然后将插入点以后的数字都向后移动一个单位(a[i+1]=a[i]),然后将数据插入即可。
代码:
#include<iostream> using namespace std; int main(){ int a[12];//定义用于存储数字的数组 int n;//输入的新的数字 int i=0,j=0,k=0;//排序用到的变量 cout<<"please input ten integers:"<<endl; for(i=1;i<=10;i++){ cin>>a[i]; } //输入数据 for(i=1;i<10;i++){ k=i; for(j=i+1;j<=10;j++){ if(a[j]<a[k]){ k=j; } } a[0]=a[i]; a[i]=a[k]; a[k]=a[0]; } cout<<"sorting order:"<<endl; for(i=1;i<=10;i++){ cout<<a[i]<<" "; } //输出数据 cout<<endl; cout<<"please input a new one:"; cin>>n; for(i=1;i<=10;i++){ if(a[i]>n){ k=n; for(j=10;j>=i;j--){ a[j+1]=a[j]; } a[i]=n; break; } } cout<<"new sorting order:"<<endl; for(i=1;i<=11;i++){ cout<<a[i]<<" "; } //输出数据 cout<<endl; return 0; }
将已经排好序的数组中的数据逆置:
分析:实现顺序的逆置,需要找到数组中的中间的数组,以该数字作为中间点,对应的两边的数字交换即可。
#include<iostream> using namespace std; int main(){ int a[11];//定义用于存储数字的数组 int i=0,j=0,k=0;//排序用到的变量 cout<<"please input ten integers:"<<endl; for(i=1;i<=10;i++){ cin>>a[i]; } //输入数据 for(i=1;i<10;i++){ k=i; for(j=i+1;j<=10;j++){ if(a[j]<a[k]){ k=j; } } a[0]=a[i]; a[i]=a[k]; a[k]=a[0]; } cout<<"sorting order:"<<endl; for(i=1;i<=10;i++){ cout<<a[i]<<" "; } //输出数据 cout<<endl; cout<<"Reverse order:"<<endl; i=10; for(j=1;j<=(i/2);j++){ a[0]=a[j]; a[j]=a[i+1-j]; a[i+1-j]=a[0]; } for(i=1;i<=10;i++){ cout<<a[i]<<" "; } //输出数据 cout<<endl; return 0; }
还有一种方法就是,在建立一个数组,直接在赋值过程中完成逆置,即:
#include<iostream> using namespace std; int main(){ int a[11];//定义用于存储数字的数组int b[11]; int i=0,j=0,k=0;//排序用到的变量 cout<<"please input ten integers:"<<endl; for(i=1;i<=10;i++){ cin>>a[i]; } //输入数据 for(i=1;i<10;i++){ k=i; for(j=i+1;j<=10;j++){ if(a[j]<a[k]){ k=j; } } a[0]=a[i]; a[i]=a[k]; a[k]=a[0]; } cout<<"sorting order:"<<endl; for(i=1;i<=10;i++){ cout<<a[i]<<" "; } //输出数据 cout<<endl; cout<<"Reverse order:"<<endl; i=10; for(j=1;j<=i;j++){b[j]=a[i+1-j]; } for(i=1;i<=10;i++){ cout<<b[i]<<" "; } //输出数据 cout<<endl; return 0; }该方法与上面的方法相比,数据的计算步骤减少了,但是增加了系统空间的开销