题目:
已知一个顺序表L,其中的元素递增有序排列,设计一个算法,插入一个元素x(x为int型)后保持该顺序表仍然递增有序排列。
#include<iostream>
using namespace std;
template<class T>
int arryLength(T &arr)
{
return sizeof(arr) / sizeof(arr[0]);
}
void test01(const int &x, int a[],int length)
{
int flag = true;
int tmp = 0;
//cout << length << endl;
for (int i = 0; i <= 9; i++) {
if (a[i] <= x && flag) {
cout << a[i] << endl;
continue;
}
if(a[i] >= x && flag) {
cout << i << endl;
tmp = a[i];
a[i] = x;
flag = false;
cout << flag << endl;
continue;
}
if (!flag) {
int tmp_2 = a[i];
cout << i << endl;
a[i] = tmp;
tmp = tmp_2;
}
}
}
template<class T>
void printArry(const T & a)
{
for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++) {
cout << a[i] << " " ;
}
cout << endl;
}
int main()
{
int a[10] = { 1,2,3,4,5,6,8 };
int x = 3;
int length = arryLength(a);
test01(x, a,length);
printArry(a);
system("pause");
return 0;
}
//在一个循环中完成操作;
重点1:
c++中计算数组的长度应该用模板,防止数组被降为整形指针。
template<class T>
void printArry(const T & a)
{
for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++) {
cout << a[i] << " " ;
}
cout << endl;
}
template<class T>
int arryLength(T &arr)
{
return sizeof(arr) / sizeof(arr[0]);
}
重点2:
flag标记动作的状态,可以进入不同的操作;
重点3:
前后相互交换的算法;