如题,我为了排序而排序的,因为我质疑有了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) 完成5种常用内部排序算法的演示,5种排序算法为:快速排序,直接插入排序,选择排序,堆排序,希尔排序; (2) 待排序元素为整数,排序序列存储在数据文件中,要求排序元素不少于30个; (3) 演示程序开始,...
在提供的文件中,"sort.c"很可能包含了这六种排序算法的C语言实现,而"set.c"可能包含了一些辅助函数,如创建、操作集合等。"main.c"是主程序,负责调用排序算法并展示结果。"set.h"和"sort.h"可能是头文件,定义了...
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
在实际应用中,应根据数据特性选择合适的排序算法,例如,快速排序和二路归并排序在大多数情况下效率较高,而冒泡排序和直接插入排序则适用于小规模数据或部分有序数据。在学习这些算法时,不仅要关注代码实现,更要...
例如,冒泡排序和选择排序适合小规模数据,而快速排序和归并排序则适用于大规模数据。在实际应用中,应根据具体需求和数据特性选择合适的排序算法。学习和理解这些排序算法的原理及源码实现,对于提升编程能力具有...
在IT领域,排序算法是计算机科学中的基础但至关重要的部分,尤其对于编程和算法设计而言。本主题将深入探讨四种常见的排序算法:堆排序、快速排序以及两种未在标题中明确提到但同样重要的排序方法——基数排序和计数...
排序算法是计算机科学中至关重要的一部分,它涉及到如何有效地组织和排列数据。无论是处理数据库记录、优化数据结构还是解决复杂问题,排序算法都是基础工具。在本文中,我们将深入探讨内部排序算法,包括它们的工作...
下面将详细讲解这7种排序算法:快速排序、归并排序、插入排序、选择排序、冒泡排序、堆排序以及希尔排序。 1. **快速排序**:由C.A.R. Hoare提出的,采用分治策略。基本思想是选取一个基准元素,通过一趟排序将待...
本资源提供了七大经典排序算法的实现程序,包括快速排序、冒泡排序、选择排序、归并排序、插入排序、希尔排序和堆排序。下面将逐一详细介绍这些排序算法及其原理。 1. 快速排序:由C.A.R. Hoare提出,是一种采用...
而堆排序和快速排序则是不稳定的。在处理大量数据时,堆排序和快速排序通常比插入排序和冒泡排序更有效率。了解并熟练掌握这些排序算法,将有助于你编写出更高效、更灵活的C++程序。 在提供的"Algorithms"压缩包中...
例如,直接插入排序和冒泡排序适合小规模数据,而快速排序和堆排序则适用于大规模数据。选择排序和希尔排序在某些特定条件下也能展现出较高的效率。在实际应用中,我们需要根据数据的特性、内存限制以及时间效率要求...
例如,快速排序在平均情况下的时间复杂度为O(n log n),但在最坏情况下为O(n^2),而堆排序则总能保持O(n log n)的时间复杂度。了解并掌握这些排序算法对于提升编程能力和解决实际问题具有重要意义。
而对于小数据集,简单的排序算法如插入排序或选择排序就足够了。在Java中,这些排序算法可以通过Collections.sort()方法或者自定义Comparator来实现,方便快捷。通过理解和掌握这些算法,开发者可以更好地优化代码...
而处理大规模数据时,快速排序和堆排序则表现出更好的性能。了解并熟练掌握这些排序算法,对于提升编程技能和解决实际问题具有重要意义。在实际应用中,往往需要根据具体情况选择合适的排序算法,以达到最佳的效率和...
直接插入排序 选择排序 堆排序 归并排序 快速排序 冒泡排序等七种排序方法
根据给定的文件信息,我们将深入...而快速排序、归并排序等算法虽未在题目中提及,但在实际工程中应用更为广泛,因其较高的效率和稳定性。理解这些排序算法的原理和优劣,有助于我们在面对具体问题时做出合理的选择。
全面的排序算法实现,包括插入排序、合并排序、堆排序、快速排序。 堆排序:HeapSort 讲解详见http://blog.csdn.net/fly_yr/article/details/8550701 插入排序:InSertion_Sort 讲解详见...
数据结构(c语言版)严蔚敏 吴伟民编著 中直接插入排序、折半排序、shell排序、冒泡排序、快速排序、选择排序、堆排序的实现、归并排序,使用c语言实现
已排序数组对某些算法(如快速排序)可能导致最坏情况,而随机数组能更好地反映算法的平均性能。通过比较这些排序算法在不同数组上的运行时间,我们可以评估它们在实际应用中的适用性。 在`main.cpp`和`sort.h`文件...
根据提供的文件信息,我们可以深入探讨几种经典的排序...而对于大规模数据集,快速排序通常是更好的选择。此外,希尔排序通过引入增量序列,能够在一定程度上改善插入排序的时间复杂度,尤其是在数据量较大时表现更优。