选择排序

选择排序

选择排序,可以说是所有排序中最为简单的一种方式,选择排序的原理就是,把所有数中最小的数挑出来放在第一个位置,然后不再考虑第一个数,剩下的数中再将最小的挑出来放在第一个位置,以此类推,这样我们便可以将一列数进行排序了,这种算法非常的简单,我们今天想说的不仅仅是算法的实现,也是整个排序和代码的艺术性的实现,下面让我们看一下我们的代码:

package paixu;

import java.nio.file.Watchable;

public class Example {

 public static void sort(Comparable[] a) {

  int N = a.length;
  for (int i = 0; i < N; i++) {
   int min = i;
   for (int j = i + 1; j < N; j++) {
    if (less(a[j], a[min]))
     min = j;
    exch(a, i, min);
   }
  }
 }

 public static boolean less(Comparable v, Comparable w) {
  return v.compareTo(w) < 0;
 }

 private static void exch(Comparable[] a, int i, int j) {
  Comparable t = a[i];
  a[i] = a[j];
  a[j] = t;
 }

 public static void show(Comparable[] a) {
  for (int i = 0; i < a.length; i++) {
   System.out.println(a[i] + " ");
   System.out.println();
  }
 }

 public static boolean isSorted(Comparable[] a) {

  for (int i = 1; i < a.length; i++)
   if (less(a[i], a[i - 1]))
    return false;
  return true;
 }

 public static void main(String[] args) {
  String[] a = "B,D,C,A,E,G,F, ".split(",");
  sort(a);
  assert isSorted(a);
  show(a);

 }

}
当然根据我们的代码,可想而知我们的输出的结果是按照顺序排好的A,B,C,D,E,F,G,我们这里并不是单纯的把所有代码都罗列到主函数里面,这里面用到的函数的类的思想非常的明显,这样写的好处是,如果我们想实现其它排序的话只需要非常简单的修改一点代码即可。

我们的less函数,返回的值是一个boolean类型的数值,这里面用到了一个comparable的函数,此方法如果这个字符串是等参数字符串那么返回值0,如果这个字符串是按字典顺序小于字符串参数那么返回小于0的值,如果此字符串是按字典顺序大于字符串参数那么一个大于0的值

我们的exch函数的目的是为了判断的,是用来将两个数据的值进行交换的。

我们的show函数的目的是,将排序好的数组输出在屏幕上面。

我们的isSorted是一个判断,用来判断我们的排序是否成功的,如果我们的排序成功了,那么将返回一个true,如果排序失败了,那么我们将返回一个false。

我们的sort函数就是我们选择排序的关键所在了,采用两个for循环来实现,外层的for循环是控制位置的,内层的for循环是用来决定这个数值是不是剩下数值中最小的,如果是最小的,就把它换到一个位置去。

我们的main函数中我们创建了一个string类型的数组,是将一个字符串通过split的方式变成的string类型的数组,然后调用我们的排序的方法,下面我们还涉及到一个重点就是断言的方法,也就是说,如果我们断言后面返回的是真的话,那么我们就执行下面的操作,也就是输出我们的结果,如果我们发现排序失败了,那么我们的断言将会起作用,这个时候我们会抛出一个异常,也就不会有结果的输出了。







































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章