为了排序而排序

 如题,我为了排序而排序的,因为我质疑有了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里面有现成,比这号几百倍的!如果追求完美地写,估计造的轮子实在是劳多功少!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值