- 将一维数组中的元素从小到大排序(升序排列)
#include<iostream> using namespace std; /* 选择排序法:共有n个元素,小的放最前面a[i],有n-1趟 当前元素a[i]和后面所有元素(后一个元素为a[j],j=i+1到n-1 来进行比较 */ int main() { int a[10] = { 2,5,8,7,9,4,6,1,3,0 }; cout << "排序前的数组为:"; for (int i = 0; i < 10; i++) cout << a[i] << " "; cout << endl; int t; for (int i = 0; i < 9; i++) for (int j = i + 1; j < 10; j++) if (a[i] > a[j]) { t = a[i]; a[i] = a[j]; a[j] = t; } cout << "排序后的数组为:"; for (int i = 0; i < 10; i++) cout << a[i] << " "; return 0; } /* 改进的选择排序法:从i=0开始 i就应该为包括自身在内及以后的最小元素, 若不是最小则交换,将最小的放在i位置上, 刚才的放在a[i]放在j位置 */ int main() { int a[10] = { 2,5,8,7,9,4,6,1,3,0 }; cout << "排序前的数组为:"; for (int i = 0; i < 10; i++) cout << a[i] << " "; cout << endl; for (int i = 0; i < 9; i++) { int k = i; for (int j = i + 1; j < 10; j++) if (a[k] > a[j])k = j; if (k != i) { int t = a[i]; a[i] = a[k]; a[k] = t; } } cout << "排序后的数组为:"; for (int i = 0; i < 10; i++) cout << a[i] << " "; cout << endl; return 0; }
- 用折半法在有序序列中查找指定值
这道题我最开始的思路是更新数组,把有序序列慢慢折半找到指定元素的,但是它需要返回下标,所以不能更新数组#include<iostream> using namespace std; /* 折半法:查找元素k与中间元素(可以利用除法直接取整数)进行比较 以降序有序序列为例;若中间元素>k,则在后半段寻找 反之同理 */ //输出数组 void print(int p[],int n) { cout << "数组为:"; for (int i = 0; i < n; i++) cout << p[i]<<" "; cout << endl; } //查找元素k int search(int p[],int k, int begin, int end) { int middle = (begin + end) / 2; int x = p[middle]; if (x == k)return middle; else if (x > k)return search(p, k, middle + 1, end); else if (x < k)return search(p, k, begin, middle - 1); else return -1; } int main() { int a[8] = { -12, 10, 5, -3, -5, -9, 3, 0, }; int* p = a; print(a,8); //降序排序 for (int i = 0; i < 7; i++) { int k = i; for (int j = i + 1; j < 8; j++) if (a[k] < a[j])k = j; if (k != i) { int t = a[i]; a[i] = a[k]; a[k] = t; } } cout << "排序后的"; print(a, 8); int k; cout << "需要查找的元素是:"; cin >> k; int i = search(p, k, 0, 7); if (i != -1)cout << "查找元素下标为:" << i; else cout << "该数组中没有需要该查找元素"; return 0; }
其中在思考更新数组时,我想起来了该怎么返回数组,函数是不能返回数组的,所以我查阅了资料,有一种方法:
在函数外定义数组,通过形参传入函数,在函数内修改数组#include<iostream> using namespace std; void add(float a[3], float b[3], float sum[3]) { sum[0] = a[0] + b[0]; sum[1] = a[1] + b[1]; sum[2] = a[2] + b[2]; } int main() { float A[3] = { 1, 1, 1 }; float B[3] = { 1, 2,3 }; float M[3]; add(A, B, M); cout << M[0] << " " << M[1] << " " << M[2] << endl; system("pause"); return 0; }
以下是我更新数组方法的一部分代码:
/*
定义函数int a[]中的a是指指针名,所以最好用p[]
调用的时候可以指针名或者数组名
*/
//求数组长度
int length(int p[]) {
int i = 0;
while (p[i])
i++;
return i;
}
//更新数组a[],由指针返回才可以
int* f(int *p) {
return p;
}
//查找k
int search(int p[], int k) {
int middle = length(p) / 2;
int x = p[middle];
if (k == x)return middle;
else return
}
int main() {
int a[8] = { 10,-5,3,0,-3,-5,-9,-12 };
int* p = a;
print(a);
int k;
cout << "需要查找的元素是:";
cin >> k;
int i= search(a, k);
if(i!=-1) cout<<
return 0;
}