Keresési, kiválasztási és rendezési algoritmusok



Keres.java: véletlen számok elõállítása
 
public class Keres {
 public static int N=10; //ennyi szám között keresünk
 public static int MAX=90; //1 és MAX közötti számokkal dolgozunk

 public int[] kulcs; //a számok, amik között keresünk

 public Keres() {
  kulcs=new int[N];
  for(int i=0;i<N;i++) {
   kulcs[i]=(int)(MAX*Math.random())+1; //véletlen értékek beállítása
   }
  }
 public void kiir() {
  System.out.println("a szamok:");
  for(int i=0;i<N;i++) {
   System.out.print("kulcs["+i+"]="+kulcs[i]+"\t");
   }
  System.out.println();
  }

 public static void main(String[] args) {
  Keres k=new Keres();
  k.kiir();
  }
 }



Keres1.java: lineáris keresés a számok között
 
public class Keres1 extends Keres {

 public void linearisKereses(int x) {
  int talalatok=0;
  System.out.println(x+" linearis keresese");
  for(int i=0;i<N;i++) {
   if(kulcs[i]==x) {
    System.out.println("\ttalalat: kulcs["+i+"]="+kulcs[i]);
    talalatok++;
    }
   }
  System.out.println("talalatok szama: "+talalatok);
  }

 public static void main(String[] args) {
  int x=0;
  try {
   x=Integer.parseInt(args[0]);
   }
  catch(Exception e) {
   System.out.println("Hibas parameter! "+e);
   System.exit(1);
   }
  Keres1 k=new Keres1();
  k.kiir();
  k.linearisKereses(x);
  }
 }

1. variáció: (Keres1V1.java): a legkisebb és legnagyobb elem kiválasztása
 
public class Keres1V1 extends Keres {

 public int legkisebbIndex() {
  int j=0;
  for(int i=1;i<N;i++) { 
   if(kulcs[i]<kulcs[j]) j=i; 
   } 
  return j; 
  }
 public int legnagyobbIndex() {
  int j=0;
  for(int i=1;i<N;i++) { 
   if(kulcs[i]>kulcs[j]) j=i; 
   } 
  return j; 
  }

 public static void main(String[] args) {
  int i;
  Keres1V1 k=new Keres1V1();
  k.kiir();
  i=k.legkisebbIndex();
  System.out.println("A legkisebb elem indexe: "+i+", erteke: "+k.kulcs[i]);
  i=k.legnagyobbIndex();
  System.out.println("A legnagyobb elem indexe: "+i+", erteke: "+k.kulcs[i]);
  }
 }



Rendez.java: számok rendezése a legkisebb elem kiválasztásával
 
public class Rendez extends Keres {

 public void cserel(int i,int j) {
  if(i<0 || i>=N || j<0 || j>=N || i==j) return;
  int k=kulcs[i];
  kulcs[i]=kulcs[j];
  kulcs[j]=k;
  }
 public void legkisebb(int i) {
  if(i<0 || i>=N) return;
  for(int j=i+1;j<N;j++) {
   if(kulcs[i]>kulcs[j]) cserel(i,j);
   }
  legkisebb(i+1);
  }

 public static void main(String[] args) {
  Rendez k=new Rendez();
  System.out.print("rendezes elott ");k.kiir();
  k.legkisebb(0); //kulcs tömb rendezése
  System.out.print("rendezes utan ");k.kiir();
  }
 }



Keres2.java: szekvenciális keresés a számok között
 
public class Keres2 extends Rendez {

 public void szekvencialisKereses(int x) {
  int talalatok=0;
  System.out.println(x+" szekvencialis keresese");
  for(int i=0;i<N;i++) {
   if(kulcs[i]>x) break;
   if(kulcs[i]==x) {
    System.out.println("\ttalalat: kulcs["+i+"]="+kulcs[i]);
    talalatok++;
    }
   }
  System.out.println("talalatok szama: "+talalatok);
  }

 public static void main(String[] args) {
  int x=0;
  try {
   x=Integer.parseInt(args[0]);
   }
  catch(Exception e) {
   System.out.println("Hibas parameter! "+e);
   System.exit(1);
   }
  Keres2 k=new Keres2();
  System.out.print("rendezes elott ");k.kiir();
  k.legkisebb(0); //kulcs tömb rendezése
  System.out.print("a rendezese utan ");k.kiir();
  k.szekvencialisKereses(x);
  }
 }



Rendez1.java: számok buborékrendezése
 
public class Rendez1 extends Rendez {

 private boolean voltCsere;

 public void buborekoltat(int n) {
  for(int i=1;i<n;i++) {
   if(kulcs[i-1]>kulcs[i]) {
    cserel(i-1,i); //kulcs[i-1] buborékként "feljebb emelkedik"
    voltCsere=true;
    }
   }
  }
 public void buborekRendez() {
  for(int i=N;i>=2;i--) {
   voltCsere=false;
   buborekoltat(i); //az i-dik legnagyobb elem "felbuborékol"
   if(!voltCsere) break;
   }
  }
 public static void main(String[] args) {
  Rendez1 k=new Rendez1();
  System.out.print("a rendezes elott ");k.kiir();
  k.buborekRendez();
  System.out.print("a buborekrendezes utan ");k.kiir();
  }
 }


Boda István, 2005 május 11.