`
fansfirst2008
  • 浏览: 98658 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

为了排序而排序

阅读更多

 如题,我为了排序而排序的,因为我质疑有了JAVA,我们还需要自己动手在项目中写自己的排序算法吗?

 既然说排序,自己给自己出个简单点的吧!

 题目:

       随便为一个没有排序过的int数组排序!

import java.util.ArrayList;
import java.util.Collections;


public class Test {

	
	public static void main(String[] args) {
		
		int[] waitsort = {9,2,10,100,62,78,25,47};
		

		ArrayList list = new ArrayList();
		for(int i =0;i<waitsort.length;i++){
			list.add(waitsort[i]);
		}
		Collections.sort(list);
		
		for(Object i:list){
			System.out.print(i);
		}

	}

}

 自己随手就写了实现!其实是有问题的,我下面分析下!

我本以为JAVA应该有把数组转换成LIST的方法,查看API文档,硬是没有发现,无奈只好自己写了!

后来想想,JAVA是面向对象的,原则是基本上要不支持数组!所以没什么意义!

排序算法,这个JAVA用快速堆排序,没有细读其源代码,不过把它当成工具直接用就是了!

上面运行结果,得不到期望输出!DEBUG一下,其实LIST是已经排好序的,只是输出时候打乱了!平时没有仔细的观察,再加上想当然,呵呵!要修改很简单,这里就不修改了!

 

 网上一搜排序算法,马上就有一坨一坨的代码!但是读起来真费劲,还不如自己写得快!下面是我的实现:

public class SortUtils {
	
	public static void bubbleSort(int[] array){
		for(int i=0;i<array.length-1;i++){
			for(int j=0;j<array.length-i-1;j++){
				if(array[j]>array[j+1])
					swap(j,j+1,array);
					
			}
		}
	}
	
	public static void insertSort(int[] array){
		int currentIndex = 1;
		for(int i = currentIndex;i<array.length;i++){
			int position = findInsertPosition(array,currentIndex);
			insert(array,currentIndex,position);
			currentIndex++;
		}
	}
	
	public static void selectSort(int[] array){
		int currentIndex = 0;
		for(int i = 0;i<array.length;i++){
			int minIndex = minIndex(array,i);
			swap(currentIndex,minIndex,array);
			currentIndex++;
			
		}
		
	}
	
	private static void insert(int[] array, int currentIndex, int position) {
		if(currentIndex == position) return;
		int temp = array[currentIndex];
		for(;currentIndex>position;currentIndex--)
			array[currentIndex]=array[currentIndex-1];
		array[currentIndex]=temp;
		
	}

	private static int findInsertPosition(int[] array, int currentIndex) {
		int insertPosition = 0;
		for(int i=0;i<=currentIndex;i++){
			if(array[currentIndex]<=array[i]){
				insertPosition = i;
				break;
			}
			
			
		}
		return insertPosition;
	}

	

	private static void swap(int indexA, int indexB,int[] array) {
		if(indexA==indexB) return;
		
		int temp = array[indexA];
		array[indexA]=array[indexB];
		array[indexB]=temp;
		
	}

	private static int minIndex(int[] array,int currentIndex) {
		int minIndex = currentIndex;
		for(;currentIndex<array.length;currentIndex++){
			if(array[minIndex]>array[currentIndex])
				minIndex=currentIndex;
		}
		return minIndex;
	}
   
}

 

因为目标单一,所以没有考虑很多!所以怎么写自己都不是很满意!还有好多地方要考虑的,比如泛型,实现比较接口,线程等等!姑且就这么实现吧!其实JAVAl里面有现成,比这号几百倍的!如果追求完美地写,估计造的轮子实在是劳多功少!

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics