算法与数据结构基础(一)排序基础1.选择排序

来源:互联网 发布:seo视频教程下载 编辑:程序博客网 时间:2024/05/22 02:25


一句话概括:循环每次从未排序里选择一个最小或的最大的元素依次放好,直到最后(没有未排序的了)。


1.int型数组选择排序

import java.util.Random;public class test1 {private static int a[];public static void main(String[] args) {produceData(10,1,10);print();sort();print();}//产生数据private static void produceData(int n,int min,int max ) {a = new int[n];Random random = new Random();for(int i= 0;i<n ;i++){a[i] = random.nextInt(max)%(max-min)+min;}}//排序private static void sort() {int n = a.length;for(int i=0;i<n;i++){int minindx = i;for(int j = i+1;j<n;j++){if(a[minindx]>a[j])minindx = j;}int tmp =  a[minindx];a[minindx] = a[i];a[i] = tmp;}}private static void print() {int n = a.length;for(int i=0;i<n;i++){System.out.print(a[i]+"--");}System.out.println();}}

2.使用Comparable接口实现各种数据类型排序

自定义的Student类:

import java.util.Comparator;public class Student implements Comparable<Student>{public String name;public int score;public Student(String name, int score) {super();this.name = name;this.score = score;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}@Overridepublic String toString() {return "Student [name=" + name + ", score=" + score + "]";}@Overridepublic int compareTo(Student o) {if(this.getScore()>o.getScore())return 1;else if(this.getScore()<o.getScore())return -1;elsereturn this.getName().compareTo(o.getName());}}
排序算法

import java.util.Comparator;import java.util.Random;public class test1 {public static void main(String[] args) {Student[] stus = produceData();print(stus);//打印原来顺序sort(stus);print(stus);//比较Double类型(也实现了Comparable接口)Double[] d = {3.14,3.11,3.99};sort(d);print(d);}//产生数据private static Student[] produceData() {Student[] stus = new Student[4];stus[0] = new Student("A",66);stus[1] = new Student("B",90);stus[2] = new Student("C",80);stus[3] = new Student("D",100);return stus;}//排序private static void sort(Comparable[] arry) {int n = arry.length;for(int i=0;i<n;i++){int minindx = i;for(int j = i+1;j<n;j++){if(arry[minindx].compareTo(arry[j])<0)minindx = j;}Comparable tmp =  arry[minindx];arry[minindx] = arry[i];arry[i] = tmp;}}private static void print(Object[] stus) {int n = stus.length;for(int i=0;i<n;i++){System.out.print(stus[i]+"--");}System.out.println();}}

3.编写一个类来测试排序算法运行时间(利用反射和系统时间实现)

import java.lang.reflect.Method;public class SortTestHelper {public static void testSort(String sortClassName,Comparable[] arry){try {//告诉类名即可获取class对象Class sortClass =  Class.forName(sortClassName);//指明方法名和参数列表就可以获取//getDeclaredMethod()获取的是类自身声明的所有方法,包含public、protected和private方法。  //getMethod()获取的是类的所有共有方法,这就包括自身的所有public方法,和从基类继承的、从接口实现的所有public方法。Method sortMethod = sortClass.getDeclaredMethod("sort", new Class[]{Comparable[].class});Object[] params = new Object[]{arry};long startTime = System.currentTimeMillis();//第一个参数是调用哪个对象实例的此方法,静态就写null,第二个为方法参数sortMethod.invoke(null, params);long overTime = System.currentTimeMillis();System.out.println("耗时:"+(overTime-startTime+" ms!"));judgeSorted(arry);} catch (Exception e) {e.printStackTrace();}}private static void judgeSorted(Comparable[] arry) {for (int i = 0; i < arry.length-1; i++) {if(arry[i].compareTo(arry[i+1])<0){System.out.println("排序失败!");return;}}System.out.println("排序成功!");}public static void print(Object[] data) {int n = data.length;for(int i=0;i<n;i++){System.out.print(data[i]+"--");}System.out.println();}public static Integer[] generateRandomArray(int n,int min, int max){assert min>max;Integer[] data = new Integer[n];for (int i = 0; i < data.length; i++) {data[i] = new Integer((int)(Math.random()*(max-min+1))+min);}return data;}}





阅读全文
0 0