JAVA数组,查找,排序
JAVA数组,查找,排序
数组:
基本的数据结构,线性表(数据元素之间的关系是一对一的关系)
数组反转:Array;
int a[]={1,4,6,8,2};
for (int i = 0; i < Math.sqrt(a.length); i++) {
int j=i,k=a.length-i-1;
int t=a[j];
a[j]=a[k];
a[k]=t;
}
// Collections.reverse(Arrays.asList(a));
for (int i : a) {
System.out.print(i+" ");
}
数组扩容:
public static void main(String[] args) {
int [] a= new int []{ 1 , 2 , 3 };
int [] t= new int [ 6 ];
for ( int i = 0 ; i < a.length; i++) {
t[i]=a[i];
}
a=t;
for ( int i : a) {
System.out.print(i+ " " );
}
}
程序思路:
1.先完成需求功能
2.根据程序运行结果进行优化处理
3.代码重构
4.提升效率
查找:
线性查找:
折半查找(需要数据基本有序):
折半查找//二分法
// int [] arr=new int[]{1,3,5,7,10,11};
// Scanner sc=new Scanner(System.in);
// int a=sc.nextInt();
// int f=0,en=arr.length-1;
// if(a<arr[f]||a>arr[en]){
// System.out.println("no");
// }else{
// while(f<=en){
// int s=(f+en)/2;
// if(a>arr[s]){
// f=(f+en)/2+1;
// }else if(a<arr[s]){
// en=(f+en)/2-1;
// }else if(a==arr[s]){
// System.out.println(a+" "+s);
// break;
// }
// }
// }
排序:Arrays.sort(arr);
冒泡排序:
public static void main(String[] args) {
int arr[]= new int []{ 1 , 5 , 3 , 90 , 4 , 3 , 2 , 66 };
maopao(arr ,arr.length);
}
static void maopao( int a[], int n){
//冒泡1
// for (int i = 0; i < a.length; i++) {
// for (int j=0;j<a.length-i-1;j++){ ="" if(a[j]="">a[j+1]){
// int t=a[j];
// a[j]=a[j+1];
// a[j+1]=t;
// }
// }
// }
//冒泡2
int ex=n;
while (ex!= 0 ){
int b=ex;ex= 0 ;
for ( int i = 0 ; i < b- 1 ; i++) {
if (a[i]>a[i+ 1 ]){
int t=a[i];
a[i]=a[i+ 1 ];
a[i+ 1 ]=t;
ex=i+ 1 ;
}
}
}
for ( int i = 0 ; i < a.length; i++) {
System.out.print(a[i]+ " " );
}
}</a.length-i-1;j++){>
选择排序:
public static void main(String[] args) {
int arr[]= new int []{ 1 , 5 , 3 , 90 , 4 , 3 , 2 , 66 };
System.out.println();
xuanze(arr ,arr.length);
for ( int i :arr) {
System.out.print(i+ " " );
}
}
//选择排序
static void xuanze( int a[] , int n){
for ( int i= 0 ;i
插入排序:
public static void main(String[] args) {
int arr[]= new int []{ 1 , 5 , 3 , 90 , 4 , 3 , 2 , 66 };
//maopao(arr ,arr.length);
System.out.println();
//xuanze(arr ,arr.length);
insert(arr,arr.length);
for ( int i :arr) {
System.out.print(i+ " " );
}
}
//插入排序
static void insert( int a[], int n){
int j;
for ( int i = 1 ; i < n; i++) {
int t=a[i];
for ( j=i- 1 ;t
案例:简易系统
package shuzu;
import java.util.Scanner;
public class Zuoye_1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("欢迎使用系统");
// System.out.println("请选择功能:1添加员工,2,查询员工,3修改员工,4删除员工");
// String flag=sc.next();
int [] nos=new int[2];
String [] names=new String[2];
int i=0;
exitx: while (true){
System.out.println("---------------------");
System.out.println("请选择功能:1添加员工,2,查询员工,3修改员工,4删除员工,5查询总员工,6退出系统");
System.out.println("---------------------");
System.out.println();
String flag=sc.next();
switch (flag){
///////////////////添加
///////////////////员工信息保存数组,工号不能输入,自动生成递增,员工姓名 ,考虑扩容问题
case "1":
if(i==nos.length){
//数组扩容
int[] noskuos=new int[nos.length+1];
for (int nosnum = 0; nosnum < nos.length; nosnum++) {
noskuos[nosnum]=nos[nosnum];
}
nos=noskuos;
//字符串扩容
String[] nameskuo=new String[names.length+1];
for (int name1=0;name1<names.length;name1++){
nameskuo[name1]=names[name1];
}
names=nameskuo;
}
System.out.println("请输入员工姓名");
String name=sc.next();
names[i]=name;
nos[i]=i+1;
i++;
//判断扩容
System.out.println("添加成功");
break;
//////////////////根据姓名(姓名可以重名),工号查询,二分查找
//////////////////子菜单,排序,根据工号倒序
case "2":
System.out.println("员工工号 员工姓名");
System.out.println("1按id查看,2按姓名查看,3倒序查看员工");
String selsectin=sc.next();
switch (selsectin){
case "1":
System.out.println("请输入要查询的员工号");
String sel_1;
cun_2:if(sc.hasNextInt()){
boolean cun_1=false;
sel_1=sc.next();
int ghid=Integer.parseInt(sel_1);
int first=0,ends=nos.length-1;
while(first<=ends){
int s=(first+ends)/2;
if(ghid>nos[s]){
first=(first+ends)/2+1;
}else if(ghid<nos[s]){
ends=(first+ends)/2-1;
}else if(ghid==nos[s]){
cun_1=true;
System.out.print(nos[s]+" "+names[s]+"\n");
break cun_2;
}
}
if(cun_1==false)
System.out.println("查无此人");
}else{
System.out.println("输入错误");
}
break;
case "2":
System.out.println("请输入要查询的员工姓名");
String namese_1=sc.next();
boolean cunname=false;
for (int na=0;na<names.length;na++){
if(names[na].equals(namese_1)){
cunname=true;
System.out.print(nos[na]+" "+names[na]+"\n");
}
}
if(cunname==false)
System.out.println("查无此人");
break;
case "3":
System.out.println("员工工号 员工姓名");
if(nos[0]==0){//没有数据
System.out.println("无");
}else {
p:for (int j = nos.length-1; j >=0 ; j--) {
if(nos[j]==0)
continue p;
System.out.print(nos[j]+" "+names[j]+"\n");
}
}
break;
default:
System.out.println("输入错误");break;
}
break;
//////////////////////////修改,输入员工号,更改员工名,确认在不在
case "3":
if(nos[0]==0){
System.out.println("没有可修改的员工");
}else
{
System.out.println("请输入要修改的员工的员工号");
String changes;
if(sc.hasNextInt()){
//确认员工是否存在
changes=sc.next();
int change=Integer.parseInt (changes);
boolean exis=false;
for (int ex=0;ex<nos.length;ex++) {
if (change == nos[ex]) {
exis=true;
} else if (change == 0) {
exis=false;
}
}
if(exis){
System.out.println("请输入要修改的姓名");
String changename = sc.next();
names[change - 1] = changename;
System.out.println("修改成功");
}else{
System.out.println("员工不存在");
}
}else {
System.out.println("输入错误");
}
}
break;
//////////////////////////////////删除
case "4":
if(nos[0]==0){
System.out.println("没有可删除的员工");
}else
{
System.out.println("请输入删除员工的工号");
String del;
if(sc.hasNextInt()){
//确认员工是否存在
del=sc.next();
int change=Integer.parseInt (del);
boolean exdel=false;
for (int ex=0;ex<nos.length;ex++) {
if (change == nos[ex]) {
exdel=true;
} else if (change == 0) {
exdel=false;
}
}
if(exdel){
System.out.println("请输入要删除的姓名");
changenos:for(int de=change;de<nos.length;de++){
// if(nos[de]==0)
// break changenos;
nos[de-1]=nos[de];
}
nos[nos.length-1]=0;
changenames: for(int de=change;de<names.length;de++){
// if(names[de]==null)
// break changenames;
names[de-1]=names[de];
}
names[names.length-1]=null;
System.out.println("删除成功");
}else{
System.out.println("员工不存在");
}
}else {
System.out.println("输入错误");
}
}
break;
//////////////////全体员工
case "5":
System.out.println("员工工号 员工姓名");
System.out.println("-----------------------");
if(nos[0]==0){//没有数据
System.out.println("无");
}else {
p:for (int j = 0; j < nos.length; j++) {
if(nos[j]==0)
break p;
System.out.print(nos[j]+" "+names[j]+"\n");
}
}
break;
default:
System.out.println("输入错误");break;
/////////////////////退出系统
case "6":
break exitx;
}
}
}
}

浙公网安备 33010602011771号