今天看了下 排序 写的不好 主要写插入和希尔排序 ,我的理解
插入排序就是希尔排序增量为1的特殊希尔排序,希尔排序是为了解决插入排序中的数组移动次数太多
import java.util.Arrays;
public class StraightSort {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] = {2,5,24,3,1,15};
//System.out.println(Arrays.toString(sort(a)));
System.out.println(Arrays.toString(sort2(a,a.length/2)));
}
/**
* 插入排序 直接插入排序 Straight insertion Sort 的基本操作是将记录插入到已经排好的有序表中,从而得到一个新的,记录数增1的有序表
* @param array
* @return
*/
public static int[] sort(int array[]){
if(array==null)
return array;
int temp ; //用于存储插入值
for(int i = 1 ; i <array.length ; i++){
if(array[i]<array[i-1]){
temp = array[i];
int j = i-1;
for(;j>-1&&array[j]>temp;j--){
array[j+1] = array[j];
}
array[j+1] = temp;
}
}
return array;
}
/**
* 希尔排序 将相距某个“增量”的记录组成一个子序列,这样才能保证在子序列内分别进行直接插入
*排序后得到的结果是基本有序而不是局部有序。
* ----------插入排序实际就是希尔排序 的自增变量开始为1的特殊希尔排序
**/
public static int[] sort2(int array[],int increment){
//int increment = array.length/2;
int temp;
while(increment>=1){
for(int i = increment;i<array.length;i++){
if(array[i]<array[i-increment]){
temp = array[i];
int j = i-increment;
for(;j>-1&&array[j]>temp;j= j - increment){
array[j+increment] = array[j];
}
array[j+increment] = temp;
}
}
increment = increment/2;
}
return array;
}
}
分享到:
相关推荐
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht
希尔排序是插入排序的一种优化版本,通过设定一个增量序列,将待排序的数组按照增量分成多个子序列,对每个子序列进行插入排序,最后减小增量,直至为1,整个数组有序。这种方法减少了元素移动的次数,提高了排序...
Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...
本文将深入探讨Java编程语言中实现的七种主要排序算法:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序以及归并排序。每种算法都有其独特性,适用于不同的场景和数据特性。 1. **直接插入排序**:...
- 对于接近有序的数组,插入排序的性能非常优秀,因此在某些排序算法中,例如希尔排序,会结合插入排序来提高效率。 通过理解插入排序的工作原理和实现方式,我们可以更好地掌握排序算法,并在实际编程中根据具体...
希尔排序(Shell Sort)是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一定的增量分组,对每组使用直接插入排序,然后逐渐减小增量,继续进行分组排序,直到增量...
4. **插入排序**:当间隔为1时,希尔排序实际上执行了插入排序,这是因为它现在对相邻的元素进行比较和交换,这正是插入排序的基本操作。 以下是一个简单的希尔排序Java实现的详细分析: ```java public static ...
例如,在处理大量数据时,快速排序和归并排序往往优于冒泡、选择和插入排序。同时,递归算法的运用也需要考虑到实际问题的规模和数据特性,以避免不必要的性能开销。 在实践中,我们不仅要理解每种排序算法的基本...
八种排序算法原理及Java实现是排序算法中的一种,包括冒泡排序、快速排序、直接插入排序、希尔排序、选择排序、归并排序和基数排序等。 冒泡排序是八种排序算法中的一种,属于交换排序。冒泡排序的基本思想是重复...
4. **希尔排序**:希尔排序是插入排序的优化版,它通过将数组按照一定的增量分组进行插入排序,然后逐渐减小增量,直到增量为1,完成排序。Java实现时,需要定义增量序列,如初始值为数组长度的一半,然后每次减半,...
4. **重复步骤**:减小增量,重复步骤2和3,直到增量为1,此时所有元素都在同一个子序列中,再进行一次插入排序。 以下是一个简单的Java实现示例: ```java public class SortTest { public static void shell...
在本文中,我们将对 Java 中的选择排序、插入排序和希尔排序进行详细的解释。 一、选择排序 选择排序是一种简单的排序算法。它的基本思想是:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在...
设计一个负责排序的程序包,实现多种排序算法,至少包括插入排序、冒泡排序和快速排序算法。 要求: 1.可以对任何简单类型和任意对象进行排序 2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法...
java8中经典排序算法:插入排序、堆排序,选择排序、希尔排序,基数排序、冒泡排序、归并排序、快速排_Arithmetic
此外,插入排序是八大经典排序算法之一,包括冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序、基数排序和插入排序。每种排序算法都有其适用场景和优缺点,理解并掌握这些算法有助于在实际编程中选择合适...
这里我们将深入探讨快速排序、归并排序、希尔排序、冒泡排序、选择排序以及插入排序这六种经典的排序算法,并通过Java语言来实现它们。 1. **快速排序**:由C.A.R. Hoare在1960年提出,是基于分治策略的一种高效...
总结来说,希尔排序是一种改进的插入排序,通过设置间隔使得元素间距离较大的数据能更快地接近其最终位置,从而减少了比较和交换的次数,提高了排序速度。`AlgorithmShellSort.java`文件中的代码将具体展示如何在...
这里我们主要关注Java实现的排序算法,并结合一个PPT的动画演示来探讨其中的插入排序、直接插入排序和希尔排序。 首先,让我们深入理解插入排序。插入排序是一种简单的排序算法,其基本思想是将未排序的元素逐个...
希尔排序(Shell Sort)是一种改进的插入排序算法,它的基本思想是将待排序的数组按照一定的间隔进行分组,对每组使用插入排序算法进行排序,然后缩小间隔,再对分组进行排序,直到间隔为1 为止。逐渐减小间隔大小的...
通过分组插入排序和逐渐缩小增量的策略,希尔排序可以在一定程度上提前完成排序,减少了比较和数据移动的次数。 2. 原地排序:希尔排序是原地排序算法,不需要额外的存储空间。 希尔排序的缺点 1. 时间复杂度:...