文章目录
1.数组A[0…n-1]中有多个非零元素,设计算法将非零元素移至数组前端
算法思想:两个循环变量 i 和 j,保证 i 的下一位绝对是0,用 j 去遍历数组,当遇到0元素时什么也不做,遇到非零元素时,i 往后一位,交换 i 和 j位置上的元素
void move(int a[], int n)
{
int i = -1, j = 0, temp;
for (j; j < n; j++)
{
if (a[j] != 0)
{
i++;
if (i != j)//也可以不加这个if条件
{
temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
}
2…数组A[0…n-1]中奇数移至偶数前端
算法思想:设置两个指针 i 和 j 分别指向数组第一个元素和最后一个元素,当 i 指向偶数, j 指向奇数时互换,直到 i>=j结束
3.数组A尾元素为分界线,小于等于尾元素的放其左边,反之放其右边
算法思想:将尾元素存入temp,设两个变量 i 和 j,i 指向头,j 指向尾,从 j 开始先找到一个小于分界线的元素与 i 当前位置互换,i +1,再从 i 开始找一个大于分界线的元素与 j 当前位置互换,在整个过程中每次都要检查 i 是否小于 j ,一旦二者相等则退出最外层循环,将分界线元素放进 i 位置
4.稀疏矩阵用三元组A表示,求其转置矩阵B(也用三元组表示)
算法思路:转置的实质就是将原先按行优先存储变为列优先存储的过程,原数组nm,转置就为mn,所以首先确定B数组第一行的内容,第一行的内容应该是A数组的第一列的内容,所以依次对A的三元组的列号依次检查,出现与当前B的行号相等的就存入三元组B
5.稀疏矩阵A和B采用三元组表示,计算三元组C=A+B
算法思路:AB行号相等比列号,列号也相等相加入C,列号不相等较小者入C,AB行号不等入行号较小者,分别用 i 和 j 来遍历A和B三元组,需注意行列号相等的情况下计算出的值必须不等于0才可入C,最后还需要将A和B中一方没有放入C的元素放进C
6.稀疏矩阵A和B(分别为mn和nk),采用三元组表示,求C=AxB
算法思路:写一个可以求某一三元组对应行列号位置上的值的函数,分别固定A的每一行和B的每一列进行相乘相加运算,最后将不为0的结果放进C。