算法与数据结构基础(一)排序基础1.选择排序
2017-12-10 15:13
741 查看
一句话概括:循环每次从未排序里选择一个最小或的最大的元素依次放好,直到最后(没有未排序的了)。
1.int型数组选择排序
2.使用Comparable接口实现各种数据类型排序
自定义的Student类:
3.编写一个类来测试排序算法运行时间(利用反射和系统时间实现)
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 ; 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; } @Override public String toString() { return "Student [name=" + name + ", score=" + score + "]"; } @Override public int compareTo(Student o) { if(this.getScore()>o.getScore()) return 1; else if(this.getScore()<o.getScore()) return -1; else return 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("so 4000 rt", 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 ; for (int i = 0; i < data.length; i++) { data[i] = new Integer((int)(Math.random()*(max-min+1))+min); } return data; } }
相关文章推荐
- 数据结构与算法之基础排序(冒泡/插入/选择)<十>
- 数据结构基础算法整理归纳:选择排序(四)
- 【数据结构与算法】选择排序
- 【数据结构与算法】——选择排序
- 【数据结构与算法】选择排序
- 【数据结构与算法】【排序】简单选择排序的代码实现
- 数据结构与算法之--简单排序:冒泡、选择和插入
- 数据结构与算法之排序算法---简单选择排序
- 基础数据结构算法_计数排序,基数排序,桶排序
- 看数据结构写代码(2) 选择排序 和 冒泡排序 算法优化
- 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
- 数据结构与算法——冒泡排序、选择排序和快速排序
- 数据结构与算法(C语言版)__选择排序
- C语言学习历程(十七)数据结构与排序(冒泡、选择、希尔排序)算法
- 数据结构算法之排序系列Java、C源码实现(3)--直接选择排序
- <三>java数据结构与算法 选择排序
- 【数据结构与算法】选择排序
- 【数据结构与算法 02】选择排序
- 【数据结构与算法】内部排序之二:冒泡排序和选择排序(改进优化,附完整源码)
- .net 数据结构与算法基础:高级排序