导航:首页 > 源码编译 > 常见数组算法题

常见数组算法题

发布时间:2022-06-28 08:43:09

Ⅰ 数据结构与算法 数组题

(1)如图可知,A是一个nXn的矩阵,非零元素是


(倒数第一行应该是 (R-n) is even 就是偶数,我打错了)

以及上面全部是是n为奇数的情况,图里面画的nXn矩阵的n一定是奇数,所以应该不用考虑n为偶数的情况

Ⅱ 有关java数组的题,

写一个你参考下
public static void main(String[] args) {
String[] str1={"11","22","33","44","55","66","77","88"};
String[] str2={"aa","bb","cc","dd","ee","ff","hh","ii"};
String[] str=add(str1,str2);

//两两置换位置
for(int i=0;i<str.length;i=i+2){
String tmp=str[i];
str[i]=str[i+1];
str[i+1]=tmp;
}

//输出结果
for (int i = 0; i < str.length; i++) {
System.out.print(str[i]+" ");
}
}

//连接两个字符数组
public static String[] add(String[] a, String[] b) {
String[] result = new String[a.length + b.length];
int i = 0;
for (; i < a.length; i++) {
result[i] = a[i];
}
int j = 0;
for (; i < result.length; i++) {
result[i] = b[j];
j++;
}
return result;
}

Ⅲ 算法题,请给出下面二维数组的排序算法

#include <stdio.h> #include <stdlib.h>#include <time.h> #define LINE 10 //预定义二维数组行数#define COLUMN 10 //列数void bubble_sort(int a[], int n){ int i, j, temp; for (j = 0; j < n; j++) for (i = j+1; i< n ; i++) { if(a[i] < a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } }} int main(){ int arr[LINE][COLUMN]={0}; int i,j,k; srand((unsigned)time(NULL));//初始化随种子 for (i = 0; i != LINE; i++) { for(j=0;j!=COLUMN;++j){ //逐行输入数据 arr[i][j]=rand()%1000+1;//利用随机数生成1000以内整数,方便调试 //scanf("%d",&arr[i][j]);//手工输入测试数据 } bubble_sort(arr[i], COLUMN);//输入完一行,就对该行进行排序 } for (i = 0; i != LINE; i++)//输出排序后结果 { for(j=0;j!=COLUMN;++j){ printf("%4d ",arr[i][j]); } printf("\n"); } return 0;}

Ⅳ 关于数组的算法问题

二分查找+索引可以使算法的时间复杂度将为o(log(n))左右
前提要求是两个表在建立时要 按照ID有序的建立
楼上想法很好 可惜这个是数组 不是链表

无序没有关系 你插入的时候按照顺序 开始乱序的事 你给他排个序
这个是一劳永逸的事

http://ke..com/view/610605.htm

Ⅳ 关于数组算法的问题

二分该数的位置
输入数设为x,数组设为a,数组长度为n
若我们取a[mid]与x比较

由于a是升序的,a[mid]前面的数都比a[mid]小,所以若x>a[mid] 则x>a[mid]前面的所有数,我们想要的答案就在区间[mid+1, n]。
反之答案与[1,mid-1]之间,若a[mid]=x,就退出算法(找到答案),若a[mid]<x且a[mid+1]>x,则x相邻角标也已找到,就为mid与mid+1.
分析这个算法的时间复杂度,
判断答案在不在[l,r]中,取mid=(l+r)/2.这样花O(1)判断后即可锁定答案在[l,mid-1]还是在[mid+1,r]
这样设规模为n的问题时间耗费为T(n)
则由算法过程可知:T(n)=O(1)+T(n/2) , T(1)=O(0)
n=2时,T(2)=O(1)+O(0)=O(1)
n=4时,T(4)=O(1)+O(1)=O(2)
n=8时,T(8)=O(1)+O(2)=O(3)
可发现
0=log2(1),
1=log2(2),
2=log2(4),
3=log2(8).
用数学归纳法(详见《数据结构与算法初步》中“分治算法的时间复杂度计算”)即可证明该算法时间复杂度为O(log2(n)).

顺便给份代码(c++):
#include<cstdio>
int main(){
int a[100005]={0,2,3,4,66,456,2222},n=6,x=1,ans,ret;//位置0按中国习惯不放数。
int l=1,r=6,mid;//搜索区间[1,6]
while(l<=r){
mid=(l+r)>>1;
if(a[mid]==x){ ans=mid;break; }
if(a[mid]<x && a[mid+1]>x){ ret=mid;break; }
if(a[mid]<x) l=mid;
else r=mid;
}
if(ans) printf("%d",ans);
else printf("%d %d",ret,ret+1);
}
注意,若查询的数没有前一个或后一个数,则会出错
如果为了简洁,用下面这个:
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
int a[100005]={0,2,3,4,66,456,2222},n=6,x=567,ans,ret;//位置0按中国习惯不放数。
ans=lower_bound(a+1,a+7,x)-a;
if(a[ans]==x) printf("%d",ans);
else printf("%d %d",ans-1,ans);
}
lower_bound返回(升序)数组中第一个大于等于x的数的指针

Ⅵ 一个关于二维数组的算法问题

因为相邻元素最多只有8个,可以设一个长度为8偏移坐标数组,内容是
int pos[8][2]={
-1,-1,
-1,0,
-1,1,
0,-1,
0,1
1,-1,
1,0,
1,1
};
之后对a中元素二重循环,对每个元素a[i][j],执行一个子循环
for(k=0;k<8;k++)
if(i+pos[k][0]<0 || i+pos[k][0]>4 || j+pos[k][1]<0 || j+pos[k][1]>4)
continue;
else
将a[i+pos[k][0]][j+pos[k][1]]放入用于存放a[i][j]的相邻元素的一个辅助数组

Ⅶ 求java数组经典例题。。。。。。。

经典的?那莫过于对数组的排序了。
import java.util.*;
import java.io.*; public class SortAlgorithm { static Random rand = new Random(); static void bubbleSort(int[] numlist) { // 冒泡排序算法 int temp; for(int i=1;i<numlist.length;i++) { for(int j=0; j<numlist.length-i;j++) { if(numlist[j]>numlist[j+1]) { temp=numlist[j+1]; numlist[j+1]=numlist[j]; numlist[j]=temp; } } } } static void selectionSort (int[] numlist) //选择排序算法 { int temp; for(int i=0;i<numlist.length-1;i++) for(int j=i+1;j<numlist.length;j++) if(numlist[i]>numlist[j]) { temp = numlist[j]; numlist[j] = numlist[i]; numlist[i] = temp; } } static void insertSort (int[] numlist) //插入排序算法 { int temp,in,out; for(out=1;out<numlist.length;out++) { temp=numlist[out]; in=out; while(in>0 && numlist[in-1]>=temp) { numlist[in]=numlist[in-1]; --in; } numlist[in]=temp; } } static void display (int[] num) // 打印出排序结果 { for(int i = 0;i<num.length;i++) System.out.print(num[i]+" "); System.out.println(""); } static int pRand(int mod) // 生成随即数组 { return Math.abs(rand.nextInt())%mod; } public static void main(String args[])throws IOException { int[] numList = new int[10]; for(int i = 0;i<numList.length;i++) numList[i] = pRand(100); //调用pRand方法,把随即生成的数据输入到 // 数组中 System.out.println("随即生成的数组是:"); // 打印出原数组, for(int j =0;j<numList.length;j++) System.out.print(numList[j]+" "); System.out.println(""); double begin = System.currentTimeMillis(); //排序开始时间,调用系统的当前时间 bubbleSort(numList); //执行冒泡排序 double end = System.currentTimeMillis(); //排序结束时间,调用系统当前时间 System.out.println("冒泡排序用时为:" + (end-begin)); //排序用时 System.out.println("排序后的数组为:"); display(numList); begin = System.currentTimeMillis(); selectionSort(numList); end = System.currentTimeMillis(); System.out.println("选择排序用时为:" +(end-begin)); System.out.println("排序后的数组为:"); display(numList); begin = System.currentTimeMillis(); insertSort(numList); end = System.currentTimeMillis(); System.out.println("插入排序用时为:" + (end-begin)); System.out.println("排序后的数组为:"); display(numList); } }

Ⅷ 急求数组求和的算法问题

#include"stdio.h"
#define N 10
main()
{
int s[N],m,i,j;
printf("请输入%d个整数:\n",N);
for(i=0;i<N;i++)
scanf("%d",s+i);
printf("请输入m的值:");
scanf("%d",&m);
for(i=0;i<N-1;i++)
for(j=i+1;j<N;j++)
if((s[i]+s[j])==m)
printf("\n符合条件的数是%d,%d\n",s[i],s[j]);
}

Ⅸ c语言中,数组元素问题的常用简单算法

杨辉三角
冒泡排序
选择排序

阅读全文

与常见数组算法题相关的资料

热点内容
帝国时代java下载 浏览:51
数据结构的经典算法题 浏览:192
逍遥安卓多开管理器是干什么的 浏览:912
程序员收玉米一天多少钱 浏览:353
程序员很可爱根据哪本小说改编的 浏览:982
游戏旧版安卓怎么玩 浏览:261
冗余单片机 浏览:846
cad抽壳命令怎么用 浏览:27
服务器第一地址怎么改 浏览:494
单片机最小系统电路设计流程图 浏览:663
steam源码 浏览:29
关于对数的运算法则及公式 浏览:775
明星谈如何缓解压力 浏览:143
androidlistview隐藏列 浏览:400
plc跑马灯编程 浏览:821
ios开发之网络编程 浏览:427
处理照片视频哪个app好 浏览:391
logback压缩 浏览:895
冰箱压缩机可以用气割吗 浏览:535
菜鸟如何加密商品信息 浏览:321