算法课上数组相关的算法
1.求数组最小值
int MinArry(int* x, int n) {//求数组最小值
int min = x[0];//预设x[0]最小
for (int i = 0; i < n; i++) {
if (x[i] < min) {
min = x[i];
}
}
return min;
}
2.查找数组中某个数是否存在
int SeqSearch(int* A, int n, int k) {
int i;//下标
for (i = 0; i < n; i++) {
if (A[i] == k)break;//找到则返回
}
if (i == n) return -1;//找不到则返回-1,不返回0,因为下标包括0
else return i;
}
3.数组冒泡排序
void BubbleSort(int* r,int n) {
int len;//记录区间
int tag = n - 1;//标识
while(tag!=0) {
len = tag;//更换区间
tag = 0;//重置标识
for (int j = 0; j < len; j++) {
if( r[j]>r[j+1]) {//升序
int tempt = r[j];
r[j] = r[j + 1];
r[j + 1] = tempt;
tag = j;//记录当下的交换位置,这个位置就是最后交换的下标。
}
}
}
}
4.两个升序数组合并
1)合并后有重复的数字存在
void Union(int* x, int* y, int* z, int n, int m){//两个升序合并成一个升序
int i = 0, j = 0, k = 0;
while (i < n && j < m) {//当两个数组都没有比完
if (x[i] < y[j]) {//小的先放进去
z[k++] = x[i++];
}
else {
z[k++] = y[j++];
}
}
while (i < n) {//将剩余的x,y都装进z
z[k++] = x[i++];
}
while (j < m) {
z[k++] = y[j++];
}
}
2)合并后自动删除重复的数字
void Union(int* x, int* y, int* z, int n, int m){//两个升序合并成一个升序
int i = 0, j = 0, k = 0;
while (i < n && j < m) {//当两个数组都没有比完
if (x[i] < y[j]) {//小的先放进去
//z[k++] = x[i++];
//当x[i]=y[j]时,如果允许重复,那这样也可,即直接y先输入,再到x输入
//当不允许重复时,则先比较z数组中是否已经存在,存在则舍弃,不存在输入
if(k != 0&&z[k-1]==x[i]){
i++;
}else{
z[k++]=x[i++];
}
}
else {
//z[k++] = y[j++];
if (k!=0&&z[k - 1] == y[j]) {
j++;
}
else {
z[k++] = y[j++];
}
}
}
while (i < n) {//将剩余的x,y都装进z
//z[k++] = x[i++];
if (z[k - 1] == x[i]) {
i++;
}
else {
z[k++] = x[i++];
}
}
while (j < m) {
//z[k++] = y[j++];
if (z[k - 1] == y[j]) {
j++;
}
else {
z[k++] = y[j++];
}
}
}