我的希尔排序代码
package sort;
import static print.Print.printhh;
import static print.Print.printsz;
public class ShellSort {
public static void main(String[] args) {
int[] data = {9,8,7,6,5,4,3,2,1,0};
ShellSort shellSort = new ShellSort();
long begin = System.currentTimeMillis();
for (int i = 0 ; i < 100000000 ; i++){
shellSort.sort(data);
}
long end = System.currentTimeMillis();
printhh ("希尔排序所用时间:"+(end-begin)/1000);
printsz (data);
}
public void sort(int[] data){
for (int i = data.length/2 ; i > 0 ; i/=2)
for (int j = 0 ; j < i ; j++)
insertSort (data,j,i);
}
public void insertSort(int[] data , int start , int inc){
for (int i = start + inc ; i < data.length ; i += inc)
for (int j = i ; (j >= inc) && (data[j] < data[j-inc]) ; j -= inc)
swap(data,j,j-inc);
}
public void swap(int[] data , int i , int j){
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
我的插入排序代码
package sort;
import static print.Print.*;
public class InsertSort {
public static void main(String[] args){
int[] data = {9,8,7,6,5,4,3,2,1,0};
InsertSort insertSort = new InsertSort();
long begin = System.currentTimeMillis();
for (int i = 0 ; i < 100000000 ; i++){
insertSort.sort(data);
}
long end = System.currentTimeMillis();
printhh ("插入排序所用时间:"+(end-begin)/1000);
printsz (data);
}
public void sort(int[] data){
for (int i = 1 ; i < data.length ; i++)
for (int j = i ; (j>0) && (data[j]<data[j-1]) ; j--)
swap(data,j,j-1);
}
public void swap(int[] data , int i , int j){
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
运行结果如下:
希尔排序所用时间:26
0 1 2 3 4 5 6 7 8 9
===============
插入排序所用时间:5
0 1 2 3 4 5 6 7 8 9
这结果真让我失望,因为希尔排序就是插入排序的改良版,怎么效率比插入排序还要低呢?是我的程序写错了吗?请指教
分享到:
相关推荐
- **效率差异**:希尔排序由于采用了逐步缩小增量的方法,因此通常比简单的直接插入排序更快。 - **稳定性**:直接插入排序是稳定的排序算法,而希尔排序则不是。 - **适用场景**:对于较小的数据量或者部分有序的...
希尔排序的时间复杂度在最坏情况下为O(n^2),但在实际应用中通常比插入排序更快。 4. **快速排序(Quick Sort)**: 快速排序是由C.A.R. Hoare提出的,是目前最常用的排序算法之一。它采用分治策略,选取一个基准...
它通过允许交换远距离的元素来改进插入排序,从而使得元素移动得更快。这种排序算法不是稳定的排序算法。 - **实现逻辑**: - 选择一个增量序列t1,t2,…,tk,其中ti > tj, tk = 1; - 按增量序列个数k,对序列...
希尔排序使用一个增量序列,逐步缩小间隔,使得元素可以更快地达到最终位置,从而提高了效率。 3. **冒泡排序**: 冒泡排序是一种简单的交换排序,通过不断比较相邻元素并交换位置,使得最大(或最小)的元素逐渐...
希尔排序的时间复杂度取决于增量序列的选择,通常比简单插入排序更快,但不如其他高效的排序算法(如快速排序、归并排序)。 这些排序算法各有优缺点,选择哪种算法取决于具体的应用场景。例如,对于小规模数据或...
- 对于小规模或部分有序的数据,折半插入排序可以提供更快的排序速度。 这四种排序算法在实际应用中各有优劣,选择哪种算法取决于具体需求,如数据规模、数据分布以及对稳定性的要求。理解并掌握这些排序算法有助...
希尔排序的时间复杂度通常比插入排序要好,但不如其他更高效的排序算法,如快速排序或归并排序。 3. **冒泡排序**: 冒泡排序是一种直观的排序算法,通过不断交换相邻的逆序元素来逐渐排序整个数组。在每一轮迭代...
总结来说,希尔排序是一种改进的插入排序,通过设置间隔使得元素间距离较大的数据能更快地接近其最终位置,从而减少了比较和交换的次数,提高了排序速度。`AlgorithmShellSort.java`文件中的代码将具体展示如何在...
提供的文件`isort.c`和`sort_simon.h`可能包含插入排序和希尔排序的C语言实现,而`sort_in.txt`很可能是用于测试这些排序算法的数据输入文件。在测试排序算法时,通常会考虑以下几点: 1. **正确性**:确保排序后的...
- 希尔排序是插入排序的改进版,通过设置间隔序列来减少元素的比较次数,使元素能够更快地达到基本有序状态。 - 在C#中,希尔排序通常使用增量序列进行多次插入排序,随着增量逐渐减小,直到为1,完成排序。 了解...
希尔排序的时间复杂度在最坏的情况下可以达到O(n^2),但在实际应用中,由于其分组特性,通常能比简单插入排序更快地完成排序。 下面我们将深入探讨希尔排序的原理、C语言实现以及如何优化这个算法。 1. **希尔排序...
希尔排序的时间复杂度在最坏情况下可以达到O(n^2),但在实际应用中通常比简单的插入排序更快。 2. **插入排序**:插入排序是最简单的排序算法之一,适用于小规模或部分有序的数据。它通过将每个元素依次与已排序的...
总的来说,希尔排序是一种改进的插入排序,通过增量策略优化了插入排序在处理大规模数据时的效率,适用于需要快速排序但又无法使用更高级排序算法的情况。在实际编程中,希尔排序常常作为其他复杂排序算法的备选方案...
希尔排序是插入排序的一种更高效的改进版本,通过将待排序的数组元素按某个增量分组,然后对每组使用直接插入排序算法排序。随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,...
本篇将详细讲解两种高效排序算法——快速排序和希尔排序,并结合C#的实现进行阐述。 首先,快速排序是一种分治策略的典型应用,由英国计算机科学家 Tony Hoare 在1960年提出。它的基本思想是选取一个基准元素,将...
希尔排序的时间复杂度取决于增量序列,但通常比简单插入排序更快。 5. **堆排序**: 堆排序利用了二叉堆的数据结构,将待排序序列构造成一个大顶堆或小顶堆,然后不断将堆顶元素与末尾元素交换,调整堆,直到整个...
在实践中,希尔排序通常比简单插入排序更快,尤其在处理大型数据集时,其效率优势更为明显。 希尔排序的优点在于: - **适应大规模数据**:由于其分组策略,希尔排序特别适合处理大量数据,能在较短的时间内对数据...
- 插入排序:希尔排序是插入排序的优化版本,它通过分组减少了元素间的比较和移动次数。 - 快速排序、归并排序、堆排序:这些都是O(nlogn)复杂度的排序算法,但它们各有特点,适用于不同的场景。 5. **区域赛题目...
希尔排序的时间复杂度在最坏情况下为O(n^1.5),但通常比简单插入排序更快。 4. 快速排序法: 快速排序由C.A.R. Hoare提出,是一种非常高效的排序算法,平均时间复杂度为O(n log n)。它的基本思想是通过一趟排序将...
在实际应用中,希尔排序通常比简单的插入排序更快,尤其在处理大型数据时。 在Java中实现希尔排序,我们可以定义一个希尔排序的函数,接受一个整型数组作为参数,然后按照上述步骤进行排序。代码如下: ```java ...