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