java 排序

来源:互联网 发布:ultraedit汉化软件 编辑:程序博客网 时间:2024/05/18 01:09

排序方法有:(1)插入排序(2)冒泡排序(3)选择排序(4)Shell排序(5)快速排序(6)归并排序(7)堆排序(8)SortUtil

  1. 冒泡排序
冒泡的思想是,将排序的元素看成是排列的“气泡”,较小的元素比较轻,会往上浮。每次自底向上检查一遍这个序列,比较相邻的两个元素,顺序不对就交换两者, 即“轻”的元素在上,一遍处理后最“轻”的元素就在最上面了;处理两遍次“轻”的元素就“浮”到次高位了,这样经过n-1遍处理就得到正确排序的序列。
2.  选择排序
  选择排序是,将所有元素L[1~n]与第一个元素L[1]比,得到最小的放在L[1],这样也需要n-1次处理,第i遍处理,依次比较L[i]与L[i]~L[n-1],选择出第i小的元素放在L[i]的位置上。
3.   插入排序
插入排序是,经过i遍的处理,L[i]已排好,然后第i+1遍处理时,将L[i+1]插入到L[1~i]中,使它还是一个正确排序的序列。简言之就是,每一步将一个待排序的数据按其大小插入到一个已经排序的数列的适当位置,直到全部插完为止。
4.   Shell排序
remove(i):删除第i个元素,剩余元素左移,第i位置的元素是以前的i+1位置的值。返回被删除的第i个元素。
Random():产生随机数;Random(n)产生n个随机数;(Random(n)).nextInt(mod)产生n个(0~mod)范围的随机数。
下面是用插入排序实现的程序:
import java.sql.Array;import java.util.*;public class ListSort {ArrayList<Integer> list;//num是数组中数据的个数,mod是表示数组的上限,即1~mod之间的数。public ListSort(int num, int mod){list=new ArrayList();Random dom=new Random();System.out.println("排序前的数组为:");for (int i=0;i<num;i++){//生成(0~mod)之间的数//随机数的产生参考http://xyliufeng.iteye.com/blog/1068178\list.add(dom.nextInt(mod));//System.out.println("list["+i+"]="+list.get(i));}Iterator<Integer> it = list.iterator();while(it.hasNext()){   System.out.print(it.next() + ",");}}public void PaiXu(){Integer temp;int MaxSize=1;for (int i=1;i<list.size();i++){//注意:list.remove()每去掉一个元素,剩余的元素会自动向前移一个。//list.remove(Obj)是删除一个对象元素,比如list.remove(Integer 1)是删除值为1的元素,list.remove(1)是删除index=1处的元素。temp=list.remove(i);if(temp.intValue()>=list.get(MaxSize-1).intValue()){//list.add(index,element)插入元素到index这个位置,原来的index右边的元素整体向右移一位。list.add(MaxSize,temp);MaxSize++;}else{for (int j=0;j<MaxSize;j++){if((list.get(j)).intValue()>=temp.intValue()){list.add(j,temp);MaxSize++;break;}}}}System.out.println("插入排序后的数组为:");for(int i=0;i<list.size();i++){System.out.println(list.get(i));}//Iterator it = list.iterator();//while(it.hasNext()){//   System.out.print(it.next() + ",");//}}public static void main(String[] args) {ListSort s=new ListSort(5,12);s.PaiXu();}}