JAVA算法-入门:排序之选择排序(JAVA实现)

排序是一个最基础的算法,是也一个比较简单的算法,我们都必须要掌握,其中的设计思想是这样的:

首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置。再次,在剩下的元素中找到最小的元素,酱它与数组的第二个元素交换位置。如此重复,直到将整个数组排序。(不断选择剩余元素中的最小者)。

 这里我用两种编程方法来设计排序算法,分别是直接main实现和方法实现

第一个是用一个比较简单的main实现,简单理解:

public class SelectionSortMain {
	public static void main(String[] args) {
		String[] a = {"E","O","A","U","I"};   //定义一个数组
		for(int i = 0; i < a.length;i++) {
			for(int j = i+1 ; j < a.length;j++) {
				if(a[j].compareTo(a[i]) < 0) {
					//compareTo()方法是对比两者之间的ASCII值
					String temp = a[i];	   //定义一个临时变量储存temp
					a[i]=a[j];				//位置交换
					a[j] = temp;
				}				
			}	
			System.out.print("第"+ (i+1) +"次排序:");
			for(int k = 0;k < a.length;k++) {
				System.out.print(a[k]+" ");
			}
			System.out.println();			
		}
	}
}

输出结果:

可以看到每次循环后交换的位置是怎样实现的。

接下来是更高级点的方法实现,实现思想也是一样的,只是相比起来更加模块化


public class SelectionSort {
	public static void main(String[] args) {
		String[] a = {"E","A","C","M","O","Y","K","L","U","W","Z"};
		SelectSortsort(a);
		show(a);
		
	}
	public static void SelectSortsort(Comparable[] a) {
		//将A升序排列
		int N=a.length;	//获取数组长度
		for(int i = 0;i < N;i++) {
			//将a[i]和a[i+i...N]中最小的元素交换
			int min = i;
			for(int j = i+1;j<N;j++) {
				if(less(a[j],a[min]))
					min = j;	
			}
			exch(a,i,min);
		}
	}
	
	/**
	 * less()方法对元素进行比较
	 * @param v
	 * @param w
	 * @return
	 */
	private static boolean less(Comparable v,Comparable w) {
		return v.compareTo(w) < 0;
	}
	
	/**
	 * 该方法将元素交换位置
	 * @param a
	 * @param i
	 * @param j
	 */
	private static void exch(Comparable[] a,int i ,int j) {
		Comparable t =a[i];
		a[i] = a[j];
		a[j] = t;
	}
	
	/**
	 * 遍历函数
	 * @param a
	 */
	private static void show(Comparable[] a) {
		for(int i = 0;i<a.length;i++) {
			System.out.print(a[i]+" ");
			System.out.println();
		}
	}
}


该教程参考图书 算法(第四版)

猜你喜欢

转载自blog.csdn.net/u010067848/article/details/79056648
今日推荐