`
txin0814
  • 浏览: 219833 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

几种常用排序算法

    博客分类:
  • java
阅读更多
    最近刚上班,在公司每天除了学习业务以外就是打打酱油,利用空余时间整理了几个排序算法
/**
 * @author txin0814 E-mail:txin0814@sina.com
 * @version 1.0
 * @date Apr 1, 2011 2:28:06 PM
 * @description 排序类的 基类
 */

public abstract class BaseSorter<E extends Comparable<E>> {
	
	public abstract void sort(E[] array,int from,int len);
	
	public final void sort(E[] array){
		sort(array,0,array.length);
	}
	
	protected final void swap(E[] array,int from,int to){
		E temp = array[from];
		array[from] = array[to];
		array[to] = temp;
	}
}

/**
 * @author txin0814 E-mail:txin0814@sina.com
 * @version 1.0
 * @date Apr 1, 2011 2:34:47 PM
 * @description 插入排序 该算法在数据规模小的时候十分高效,
 * 				该算法每次插入第K+1到前K个有序数组中一个合适位置,
 * 				K从0开始到N-1,从而完成排序
 */

public class InsertSorter<E extends Comparable<E>> extends BaseSorter<E>{
	
	//当SORT_TYPE为false时按降序排列 为TRUE时按升序排列
	public static boolean SORT_TYPE = false; 

	@Override
	public void sort(E[] array, int from, int len) {
		E tmp=null;
        for(int i=from+1;i<from+len;i++){
            tmp=array[i];
            int j=i;
            for(;j>from;j--){
            	if(SORT_TYPE){
            		if(tmp.compareTo(array[j-1])<0){
                        array[j]=array[j-1];
                    }else break;
            	}else{
            		if(tmp.compareTo(array[j-1])>0){
                        array[j]=array[j-1];
                    }else break;
            	}
            }
            array[j]=tmp;
        }
        
        /*for (E e : array) {
			System.out.println(e);
		}*/

	}

	public static void main(String[] args) {
		Integer[] elem = {32, 43, 1, 3, 54, 4, 19};
		InsertSorter<Integer> insertsort = new InsertSorter<Integer>();
		//InsertSorter.SORT_TYPE = true;
		insertsort.sort(elem);
		for (Integer integer : elem) {
			System.out.println(integer);
		}
	}
}


/**
 * @author txin0814 E-mail:txin0814@sina.com
 * @version 1.0
 * @date Apr 1, 2011 2:53:29 PM
 * @description 冒泡排序 算法思想是每次从数组末端开始比较相邻两元素,把第i小的冒泡到数组的第i个位置。
 * 				i从0一直到N-1从而完成排序。(当然也可以从数组开始端开始比较相邻两元素,
 * 				把第i大的冒泡到数组的第N-i个位置。i从0一直到N-1从而完成排序。)
 */

public class BubbleSorter<E extends Comparable<E>> extends BaseSorter<E> {

	//当SORT_TYPE为false时按降序排列 为TRUE时按升序排列
	public static boolean SORT_TYPE = false; 

	public final void bubble_down(E[] array, int from, int len) {
		for (int i = from; i < from + len; i++) {
			for (int j = from + len - 1; j > i; j--) {
				if (array[j].compareTo(array[j - 1]) > 0) {
					swap(array, j - 1, j);
				}
			}
		}
	}

	public final void bubble_up(E[] array, int from, int len) {
		for (int i = from + len - 1; i >= from; i--) {
			for (int j = from; j < i; j++) {
				if (array[j].compareTo(array[j + 1]) > 0) {
					swap(array, j + 1, j );
				}
			}
		}
	}

	@Override
	public void sort(E[] array, int from, int len) {
		if (SORT_TYPE) {
			bubble_up(array, from, len);
		} else {
			bubble_down(array, from, len);
		}
	}
	
	public static void main(String[] args) {
		Integer[] elem = {32, 43, 1, 3, 54, 4, 19};
		BubbleSorter<Integer> bsort = new BubbleSorter<Integer>();
		//BubbleSorter.DWON = true;
		//bsort.sort(elem);
		//BubbleSorter.SORT_TYPE = true;
		bsort.sort(elem, 0, elem.length);
		for (Integer integer : elem) {
			System.out.println(integer);
		}
	}

}

/**
 * @author txin0814 E-mail:txin0814@sina.com
 * @version 1.0
 * @date Apr 1, 2011 3:17:42 PM
 * @description 选择排序 选择排序相对于冒泡来说,它不是每次发现逆序都交换,
 * 				而是在找到全局第i小的时候记下该元素位置,最后跟第i个元素交换,从而保证数组最终的有序。
 * 				相对与插入排序来说,选择排序每次选出的都是全局第i小的,不会调整前i个元素了
 */

public class SelectSorter<E extends Comparable<E>> extends BaseSorter<E> {

	@Override
	public void sort(E[] array, int from, int len) {
		for (int i = 0; i < len; i++){
			int smallest = i;
			int j = i + from;
			for(;j < from + len ; j++){
				if(array[j].compareTo(array[smallest]) < 0){
					smallest = j;
				}
			}
			swap(array,i,smallest);
		}
	}
	
	public static void main(String[] args){
		Integer[] elem = {12,20,2,5,1,25,55,15};
		SelectSorter<Integer> sort = new SelectSorter<Integer>();
		sort.sort(elem);
		for (Integer integer : elem) {
			System.out.println(integer);
		}
	}

}
分享到:
评论

相关推荐

    几种常用排序算法的C语言实现

    一些常用排序算法的C语言实现,包括直接选择排序,希尔排序,直接插入排序,快速排序,归并排序,冒泡排序,堆排序

    几种常见排序算法实例

    本文将详细解析标题中提及的五种排序算法:位与、选择、冒泡、插入以及qsort,并结合在VC6.0环境下进行编译实践的情况。 1. **位与排序**: 位与操作符(`&`)在某些特定场景下可用于排序,例如在整数数组中,通过...

    几种常见排序算法代码

    几种常见的排序算法是编程领域中基础且重要的知识点,它们各自有不同的特点和适用场景。本文将详细介绍这些算法,并分析其效率。 一、冒泡排序 冒泡排序是一种简单的排序算法,通过不断交换相邻的两个元素来逐步...

    几种常见排序算法实现

    几种常见排序 基于比较的排序算法: 下界是 nlgn 1.1 SelectionSort:每次选出最下的元素,放在当前循环最左边的位置。 1.2 BubbleSort:每次比较相邻的两个数,使得最大的数像气泡一样冒到最右边。 1. 3 Insertion...

    几种常见排序算法JAVA实现.pdf

    几种常见排序算法JAVA实现.pdf

    几种常见排序算法的实现

    本文将深入探讨六种常见的排序算法:选择排序、插入排序、冒泡排序、希尔排序、快速排序以及归并排序,它们都是编程实践中不可或缺的基础知识。 1. **选择排序(Selection Sort)**: 选择排序的工作原理是每一次...

    几种常见排序算法(JAVA实现).pdf

    几种常见排序算法(JAVA实现).pdf

    几种排序算法整理

    本文将深入探讨由C语言实现的几种常见排序算法,包括它们的基本原理、实现细节和性能特点。 首先,让我们从最经典的排序算法——冒泡排序(Bubble Sort)开始。冒泡排序通过不断地交换相邻的不正确顺序的元素来逐步...

    几种常用排序算法实现及耗时比较

    包括冒泡排序,选择排序,插入排序,希尔排序,快速排序等常用排序算法的实现并耗时比较

    设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。

    设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。 在本文中,我们将设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数,以取得直观感受。内部排序算法是指在内存中...

    数据结构中几种常见的排序算法之比较

    数据结构中几种常见的排序算法之比较,比较常见的冒泡排序、快速排序等

    最常见的几种排序算法,来看看

    这里我们将深入探讨几种最常见的排序算法,包括冒泡排序、选择排序、插入排序、快速排序以及归并排序。 1. 冒泡排序(Bubble Sort) 冒泡排序是最基础的排序算法之一,它通过不断地比较相邻元素并交换位置来实现...

    用Java实现几种常见的排序算法

    根据提供的文件信息,本文将详细...以上就是四种常见排序算法在Java中的实现方式。通过这些基本排序算法的学习,可以帮助开发者更好地理解数据结构和算法的基础知识,同时也能够为后续学习更复杂的算法打下坚实的基础。

    几种常见的排序算法

    这是几种常见的排序算法,我是用C语言编写的,而且代码都是经过我亲自认证的,保证没有什么问题!希望需要的宅男宅女们可以用到!

    用php实现几种常见的排序算法共6页.pdf.zip

    这份资料"用php实现几种常见的排序算法共6页.pdf.zip"显然包含了关于如何使用PHP实现几种常见排序算法的教程或笔记。 首先,让我们回顾一下几种常见的排序算法,并讨论它们在PHP中的实现: 1. **冒泡排序**...

    几种常用的排序算法源码

    本文将详细讲解标题中提到的几种排序算法:插入排序、堆排序,以及快速排序和计数排序,这些都是在实际编程中经常使用的算法。 1. **插入排序**(Insertion Sort) 插入排序是一种简单直观的排序算法,它的工作...

    Java几种常见的排序算法

    Java几种常见的排序算法

    几种内部排序算法总结

    ### 几种内部排序算法总结 #### 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,依次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行的,...

Global site tag (gtag.js) - Google Analytics