数据结构算法04.17
Posted nufe_wwt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构算法04.17相关的知识,希望对你有一定的参考价值。
1、设一系列正整数存放在一个数组中,试设计算法,将所有奇数存放在数组的前半部分,将所有的偶数放在数组的后半部分。要求尽可能少用临时存储单元并使时间最少。
算法设计思想:创建一个一维数组A以存放一系列正整数(大小为n),初始两个指针i、j。分别指向数组头A[1]和数组尾A[n].(A[0]不使用)。
A[1] | A[2] | A[3] | A[4] | A[5] | A[6] | A[7] | … | A[n] |
---|---|---|---|---|---|---|---|---|
↑ | -> | <- | ↑ | |||||
i | -> | <- | j |
算法过程:
Status sortArray(Array A)
while (i<=j)
if(A[i]%2==0 && A[j]%2!=0)
temp=A[i]; A[i]=A[j]; A[j]=temp;
++i; --j;
else if(A[i]%2!=0 && A[j]%2!=0) ++i;
else if(A[i]%2!=0 && A[j]%2==0)
++i; --j;
else if(A[i]%2==0 && A[j]%2==0) --j;
代码设计思路:分为四种情况:偶奇、奇奇、奇偶、偶偶
按照四种情况讨论即可
(1)占用临时存储单元:1 -> 考虑坏情况需要开辟临时存储单元temp
(2)时间复杂度O(n) -> i后移、j前移,考虑最坏情况就是其中一个不动,另外一个走全长-1.
2、设计一个算法,计算一个三元组表示的稀疏矩阵的对角线元素之和。并分析算法的时间复杂度。
int sumDiagonal3(TSMatrix S) //求三条对角线上元素之和
int i, sum=0;
for(i=1; i<=S.tu; i++)
if((S.data[i].i-S.data[i].j)<=1 && (S.data[i].j-S.data[i].i)<=1)
sum += S.data[i].e;
return sum;
if语句即使判断是否在三条对角线上的元
时间复杂度O(S.tu) .与S的非零元个数有关
在上一篇博客数据结构实验报告之三元组顺序表存储的稀疏矩阵练习中有相关介绍
以上是关于数据结构算法04.17的主要内容,如果未能解决你的问题,请参考以下文章