C++实现数组的排序/插入重新排序/以及逆置操作
2013-07-04 13:51
465 查看
插入新的数字重新排序
分析:将新的数字与已经排序好的数组中的数字一一比较,直到找到插入点,然后将插入点以后的数字都向后移动一个单位(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; }
该方法与上面的方法相比,数据的计算步骤减少了,但是增加了系统空间的开销
相关文章推荐
- C++实现数组的排序/插入重新排序/以及逆置操作
- C++实现数组的排序/插入重新排序/以及逆置操作详解
- 关于动态存储分配函数的调用,在已经过排序的数组中查找及删除内容的操作,余数的分析,删除字符数组中的空格,对链表的逆置,在源字符串中查找子字符串的个数,函数指针以及函数的调用,循环赋值带来的问题以及插入
- C++链表的创建、插入、删除、查找、合并、排序、修改等操作的实现
- C++实现单链表的创建、插入、删除、逆置操作
- 用C++ Builder实现一组数组的排序与插入操作
- 单链表的常用操作,包括单链表的创建、插入、删除、排序、逆置以及打印输出等
- 静态顺序表的实现及相关操作源代码(插入,删除,排序,逆置,超详细)
- C语言单向动态链表程序,实现链表的建立,合并,重新排序,链表元素的插入与删除,以及根据元素成员的值进行元素删除。
- 直接插入排序的C++实现及随机数组的产生方法
- 长度为N的数组乱序存放着0带N-1.现在只能进行0与其他数的swap操作,请设计并实现排序,必须通过交换实现排序。
- Objective-C中Block语法、Block使用以及通过Block实现数组排序
- 分享编程于洋C++实现 插入排序
- 插入排序-二分法-C++实现
- 直接插入排序的Java实现、性能分析以及适用场景
- 八大排序算法原理以及Java实现(直接插入排序)
- 【数据结构】用C++实现双循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- C++实现常用排序算法(快速排序、冒泡排序、希尔排序、折半插入排序、直接插入排序)
- vector中 迭代器的使用 以及元素的去重、排序、插入、删除操作。 【小笔记】
- C++学习总结——顺序存储,链式存储,索引存储,哈希存储的优缺点,以及vector数组,list链表,十字链表,索引结构,hash表的实现