码迷,mamicode.com
首页 > 编程语言 > 详细

排序专题一

时间:2016-10-04 14:04:11      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

1、选择排序

import java.util.Scanner ;

public class Selection{                         //选择排序
	public static void selectionSort(Comparable[] a){
		int n = a.length ;
		for (int i=0;i<n-1;i++) {
			int min = i ;
			for (int j=i+1;j<n;j++) {
				if (less(a[j],a[min])) {
					min = j ;
				}
			}
			exch(a,i,min) ;
		}
	}

	private static boolean less(Comparable v, Comparable w){  //判断大小
		if (v.compareTo(w)<0) {
			return true ;
		}else{
			return false ;
		}
	}

	private static void exch(Comparable[] a, int i, int j){  //交换元素 ;
		Comparable temp = a[i] ;
		a[i] = a[j] ;
		a[j] = temp ;
	}

	private static void show(Comparable[] a){       //打印出来	
		for (int i=0;i<a.length;i++) {
			System.out.print(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){//测试;
		
		System.out.println("please input the length of array:") ;
		
		Scanner sc = new Scanner(System.in) ;
		int len = sc.nextInt() ;
		String[] a = new String[len] ;

		System.out.println("please input the numbers of array:") ;
		for (int i=0;i<len;i++) {
			a[i] = sc.next() ;
		}

		if (!isSorted(a)) {
			selectionSort(a) ;
		}

		show(a) ;
	} 
}

 

2、冒泡排序

 

import java.util.Scanner ;

public class Bubble{           //冒泡排序;
	public static void bubbleSort(Comparable[] a){
		int n = a.length ;
		for (int i=1;i<n;i++) {
			for (int j=0;j<n-i;j++) {
				if (less(a[j+1],a[j])) {
					exch(a,j,j+1) ;
				}
			}
		}
	}

	private static boolean less(Comparable v, Comparable w){ //判断元素大小;
		if (v.compareTo(w)<0) {
			return true ;
		}else{
			return false ;
		}
	}

	private static void exch(Comparable[] a, int i, int j){   //交换元素;
		Comparable temp = a[i] ;
		a[i] = a[j] ;
		a[j] = temp ;
	}

	private static void show(Comparable[] a){	//打印;
		for (int i=0;i<a.length;i++) {
			System.out.print(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){//测试;
		
		System.out.println("please input the length of array:") ;
		
		Scanner sc = new Scanner(System.in) ;
		int len = sc.nextInt() ;
		String[] a = new String[len] ;

		System.out.println("please input the numbers of array:") ;
		for (int i=0;i<len;i++) {
			a[i] = sc.next() ;
		}

		if (!isSorted(a)) {
			bubbleSort(a) ;
		}

		show(a) ;
	} 
}

 

3、插入排序

 

import java.util.Scanner ;

public class Insertion{            //插入排序;
	public static void insertionSort(Comparable[] a){          //方法一;
		int n = a.length ;
		for (int i=1;i<n;i++) {
			for (int j=i;j>0 && less(a[j],a[j-1]);j--) {
				exch(a,j,j-1) ;
			}
		}
	}

	public static void insertionSort02(Comparable[] a){        //方法二;
		int n = a.length ;
		for (int i=1;i<n;i++) {
			Comparable temp = a[i] ;
			int j = i ;
			for (j=i-1;j>=0 && less(temp,a[j]);j--) {
				a[j+1] = a[j] ;
			}
			a[j+1] = temp ;
		}
	}

	private static boolean less(Comparable v, Comparable w){  //判断元素大小;
		if (v.compareTo(w)<0) {
			return true ;
		}else{
			return false ;
		}
	}

	private static void exch(Comparable[] a, int i, int j){   //交换元素;
		Comparable temp = a[i] ;
		a[i] = a[j] ;
		a[j] = temp ;
	}

	private static void show(Comparable[] a){	    //打印;
		for (int i=0;i<a.length;i++) {
			System.out.print(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){//测试;
		
		System.out.println("please input the length of array:") ;
		
		Scanner sc = new Scanner(System.in) ;
		int len = sc.nextInt() ;
		String[] a = new String[len] ;

		System.out.println("please input the numbers of array:") ;
		for (int i=0;i<len;i++) {
			a[i] = sc.next() ;
		}

		if (!isSorted(a)) {
			insertionSort02(a) ;
		}

		show(a) ;
	} 
}

  

4、希尔排序

 

import java.util.Scanner ;

public class Shell{                //希尔排序;
	public static void shellSort(Comparable[] a){
		int n = a.length ;
		int h = 1 ;
		while(h<n/3){
			h = 3*h + 1 ;
		}
		while(h>=1){
			for (int i=h;i<n;i++) {
				for (int j=i;j>=h && less(a[j],a[j-h]);j=j-h) {
					exch(a,j,j-h) ;
				}
			}
			h = h/3 ;
		}
	}

	private static boolean less(Comparable v, Comparable w){  //判断元素大小;
		if (v.compareTo(w)<0) {
			return true ;
		}else{
			return false ;
		}
	}

	private static void exch(Comparable[] a, int i, int j){    //交换元素;
		Comparable temp = a[i] ;
		a[i] = a[j] ;
		a[j] = temp ;
	}

	private static void show(Comparable[] a){	   //打印;
		for (int i=0;i<a.length;i++) {
			System.out.print(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){  //测试;
		
		System.out.println("please input the length of array:") ;
		
		Scanner sc = new Scanner(System.in) ;
		int len = sc.nextInt() ;
		String[] a = new String[len] ;

		System.out.println("please input the numbers of array:") ;
		for (int i=0;i<len;i++) {
			a[i] = sc.next() ;
		}

		if (!isSorted(a)) {
			shellSort(a) ;
		}

		show(a) ;
	} 
}

 

5、归并排序

 

import java.util.Scanner ;

public class Merge{//归并排序;

	private static Comparable[] aux ;

	public static void mergeSort(Comparable[] a){
		aux = new Comparable[a.length] ;
		mergeSort(a,0,a.length-1) ;
	}
	private static void mergeSort(Comparable[] a, int lo, int hi){
		if (lo<hi) {
			int mid = (lo+hi)/2 ;
			mergeSort(a,lo,mid) ;
			mergeSort(a,mid+1,hi) ;
			merge(a,lo,mid,hi) ;
		}else{
			return ;
		}
	}
	private static void merge(Comparable[] a, int lo, int mid, int hi){
		int i = lo ;
		int j = mid+1 ;
		for (int k=lo;k<=hi;k++) {
			aux[k] = a[k] ;
		}
		for (int k=lo;k<=hi;k++) {
			if (i>mid) {
				a[k] = aux[j] ;
				j++ ;
			}else if(j>hi){
				a[k] = aux[i] ;
				i++ ;
			}else if(less(aux[i],aux[j])){
				a[k] = aux[i] ;
				i++ ;
			}else{
				a[k] = aux[j] ;
				j++ ;
			}
		}
	}


	private static boolean less(Comparable v, Comparable w){  //判断元素大小;
		if (v.compareTo(w)<0) {
			return true ;
		}else{
			return false ;
		}
	}

	private static void exch(Comparable[] a, int i, int j){   //交换元素;
		Comparable temp = a[i] ;
		a[i] = a[j] ;
		a[j] = temp ;
	}

	private static void show(Comparable[] a){	//打印;
		for (int i=0;i<a.length;i++) {
			System.out.print(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){//测试;
		
		System.out.println("please input the length of array:") ;
		
		Scanner sc = new Scanner(System.in) ;
		int len = sc.nextInt() ;
		String[] a = new String[len] ;

		System.out.println("please input the numbers of array:") ;
		for (int i=0;i<len;i++) {
			a[i] = sc.next() ;
		}

		if (!isSorted(a)) {
			mergeSort(a) ;
		}

		show(a) ;
	} 
}

 

6、快速排序

 

import java.util.Scanner ;

public class Quick{       //快速排序;
	public static void quickSort(Comparable[] a){
		quickSort(a,0,a.length-1) ;
	}
	private static void quickSort(Comparable[] a, int lo, int hi){
		if (lo<hi) {
			int j = partition(a,lo,hi) ;
			quickSort(a,lo,j-1) ;
			quickSort(a,j+1,hi) ;
		}else{
			return ;
		}
	}
	private static int partition(Comparable[] a, int lo, int hi){
		int i = lo ;
		int j = hi ;
		Comparable temp = a[lo] ;
		while(i!=j){
			while(i<j && !less(a[j],temp)){
				j-- ;
			}
			while(i<j && !less(temp,a[i])){
				i++ ;
			}
			if (i!=j) {
				exch(a,i,j) ;
			}
		}
		exch(a,lo,i) ;
		return j ;
	}


	private static boolean less(Comparable v, Comparable w){   //判断元素大小;
		if (v.compareTo(w)<0) {
			return true ;
		}else{
			return false ;
		}
	}

	private static void exch(Comparable[] a, int i, int j){    //交换元素;
		Comparable temp = a[i] ;
		a[i] = a[j] ;
		a[j] = temp ;
	}

	private static void show(Comparable[] a){	//打印;
		for (int i=0;i<a.length;i++) {
			System.out.print(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){//测试;
		
		System.out.println("please input the length of array:") ;
		
		Scanner sc = new Scanner(System.in) ;
		int len = sc.nextInt() ;
		String[] a = new String[len] ;

		System.out.println("please input the numbers of array:") ;
		for (int i=0;i<len;i++) {
			a[i] = sc.next() ;
		}

		if (!isSorted(a)) {
			quickSort(a) ;
		}

		show(a) ;
	} 
}

  

  

 

  

  

排序专题一

标签:

原文地址:http://www.cnblogs.com/lshl/p/5930302.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!