2015/2016(1)
实验题目
学生姓名
学生学号
学生班级
任课教师
提交日期
计算机科学与技术学院
作业内容
对比数组和向量的使用方法。使用函数实现冒泡排序算法,传递参数分别为数组和向量,要求数据不被破坏。
设计思路
介绍如何在不破坏原数组的情况下进行对数组的冒泡排序实现方法,在这里,采用了新建数组记录下标的方式
1、记录方法:
代码
int *d = new int[M];//申请空间
for (int i = 0; i < M; i++)
d[i] = i; //记录下标
然后对下标排序:
for (int i = 0; i < M - 1; i++)
for (int j = 0; j < M - 1 - i; j++)
if (c[d[j]]>c[d[j + 1]])
swap(d[j], d[j + 1]);//比较大小后互换位置
最后输出,并且释放申请的内存:
cout << "数组排序后顺序:" << endl;
for (int i = 0; i < M; i++)
cout << c[d[i]] << ' ';//排序完成,输出数据
cout << endl;
cout << "数组排序前顺序:" << endl;
for (int i = 0; i < M; i++)
cout << c[i] << ' ';//输出原数据
cout << endl;
delete[] d;//释放申请的空间程序代码
#include
#include
using namespace std;
void Sort(vector &a){
vector b;//记录传入数据在a数组中的下标
for (int i = 0; i < a.size(); i++)
b.push_back(i); //记录a数组中的下标
for (int i = 0; i < a.size() - 1; i++)
for (int j = 0; j < a.size() - 1 - i; j++)
if (a[b[j]]>a[b[j + 1]])
swap(b[j], b[j + 1]);//比较大小后互换位置
cout << "数组排序后顺序:" << endl;
for (int i = 0; i < a.size(); i++)
cout << a[b[i]] << ' ';//排序完成,输出数据
cout << endl;
cout << "数组排序前顺序:" << endl;
for (int i = 0; i < a.size(); i++)
cout << a[i] << ' ';//输出原数据
cout << endl;
}//对Vector动态数组进行冒泡排序,并输出
void Sort(int c[], int M){
int *d = new int[M];//申请空间
for (int i = 0; i < M; i++)
d[i] = i; //记录下标
for (int i = 0; i < M - 1; i++)
for (int j = 0; j < M - 1 - i; j++)
if (c[d[j]]>c[d[j + 1]])
swap(d[j], d[j + 1]);//比较大小后互换位置
cout << "数组排序后顺序:" << endl;
for (int i = 0; i < M; i++)
cout << c[d[i]] << ' ';//排序完成,输出数据
cout << endl;
cout << "数组排序前顺序:" << endl;
for (int i = 0; i < M; i++)
cout << c[i] << ' ';//输出原数据
cout << endl;
delete[] d;//释放申请的空间
}//对int数组进行冒泡排序,并输出
int main(){
vector a;//用于存储传入的数据
int N;//vector数组的长度
int M;//int数组的长度
int Q;//传入的数据
while (cin >> N >> M){