`
skychongrichie
  • 浏览: 3455 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

一种时间复杂度为O(n)的排序方式

阅读更多

代码如下:

 

import java.util.BitSet;

import com.sun.java_cup.internal.internal_error;

 

public class Sort

{

private static boolean[] temp=new boolean[10000];

/**

* @notice 注意参数中的array数组中的每个元素大小不能超过9999,而且不能有重复元素。

* 同时也就意味着array数组大小不能超过10000,其中元素大小在0-9999的这样一个范围。

*/

public void sort(int[] array)

{

init();

for(int i=0;i<array.length;i++)

{

temp[array[i]]=true;

}

int loc=0;

for(int j=0;j<temp.length;j++)

{

if(temp[j])

array[loc++]=j;

}

}

private void init()//其实在此方法中通过传一个整数可以剪枝,而整数为array数组中元素的最大值

{

for(int i=0;i<temp.length;i++)

temp[i]=false;

}

public void print(int[] array)

{

for(int i=0;i<array.length;i++)

System.out.print(array[i]+"  ");

System.out.println();

}

public static void main(String[] args)

{

Sort sort=new Sort();

int array[]=new int[]{3,5,1,2,10,88,25,66};

sort.print(array);

sort.sort(array);

sort.print(array);

}

}

*****************运行结果*****************

 

3  5  1  2  10  88  25  66  

1  2  3  5  10  25  66  88  

 

今天在看《编程珠玑》开始的时候,作者提到了位示图的数据结构,受其启发想到了这样一种排序方法,不过这种排序算法对传入的数组有着严格要求,不能重复,而且数组中元素的数值范围受辅助数组的大小的制约,但是此排序算法相对来说还是很快的,时间复杂度为O(n)。感觉美中不足的是貌似主流编程语言中没有提供一种bit的数据类型,不然会大大减小前边提到的元素数值范围所受的限制。本人还是一位刚入职的菜鸟,鉴于所学有限,不足之处望大家能多多指正。


分享到:
评论

相关推荐

    根号n段归并排序算法时间复杂度分析过程

    对于每个单独的段,由于其大小不超过sqrt(n),我们可以使用线性时间复杂度O(sqrt(n))的简单排序方法(如插入排序)来对它们进行排序。然后,我们开始自底向上的归并过程,将相邻的两个已排序的段合并。每次合并操作...

    数据结构时间复杂度

    大O记法是一种表示算法时间复杂度的标准方式,它忽略了常数因子和低阶项的影响,关注的是随着输入规模增加时的增长率。 #### 二、推导大O阶方法 推导一个算法的时间复杂度,需要遵循一定的步骤。下面是推导大O阶的...

    排序算法时间复杂度的分析java语言描述

    - 时间复杂度:快速排序的平均时间复杂度为O(n log n),但在最坏情况下(输入序列已排序或逆序)时间复杂度为O(n²)。通常,快速排序被认为是实际应用中最快的排序算法之一。 5. **插入排序(Insertion Sort)** ...

    排序算法在不同数组状态下时间复杂度的比较

    在最坏的情况下,堆排序的时间复杂度为O(n log n),而在最好的情况下,如数组已经部分有序,时间复杂度仍为O(n log n)。由于堆排序不需要额外的存储空间,因此它的空间复杂度为O(1)。 2. **归并排序**: 归并排序...

    桶排序的时间复杂度的计算公式.docx

    一种常见的选择是令k = n / log n,这样每个桶大约有log n个元素,桶内排序的时间复杂度可以看作是O(log n),而合并桶的时间复杂度仍然为O(n)。于是,总时间复杂度为: \[ T(\frac{n}{\log n}) = C \cdot \frac{n \...

    各种排序算法的稳定性和时间复杂度总结

    插入排序的时间复杂度同样为O(n^2),但在最好的情况下(列表已排序),其时间复杂度为O(n)。插入排序也是稳定的,因为插入操作不会改变相等元素的相对顺序。 #### 3. 归并排序 归并排序采用分治策略,将列表分为两...

    基于C语言的常见的8种排序的时间复杂度比较算法

    堆排序的时间复杂度为O(n log n),但相比其他O(n log n)算法,其常数因子较大。 7. 计数排序(Counting Sort) 计数排序是一种非基于比较的排序算法,适用于整数排序。它通过计算每个元素在待排序序列中出现的次数...

    实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip

    直接插入排序的时间复杂度为O(n^2),其中n是待排序元素的数量。这是因为对于每个待插入元素,都需要进行至多n-1次比较。直接插入排序的空间复杂度为O(1),因为它不需要额外的存储空间。此外,直接插入排序是稳定的,...

    12种排序及时间复杂度稳定性

    快速排序平均时间复杂度为O(n log n),最坏情况为O(n^2)。快速排序是不稳定的。 9. 希尔排序(Shell sort): 是插入排序的一种改进版,通过设置间隔序列,逐步减小间隔进行排序。希尔排序的时间复杂度取决于间隔...

    排序算法时间复杂度的研究.pdf

    - 最好情况:堆排序的最佳情况时间复杂度仍为 \(O(n\log n)\),这是因为堆排序的核心操作——调整堆的结构——的时间复杂度始终为 \(O(\log n)\)。 - 平均情况:堆排序的平均时间复杂度为 \(O(n\log n)\)。 - 最坏...

    排序算法、时间对比及时间复杂度直线拟合

    快速排序的平均时间复杂度为O(n log n),但在最坏情况下为O(n^2)。 归并排序则是利用分治法的典型应用,将大问题分解为小问题解决。它将数组分为两半,分别对左右两半进行排序,然后将两个有序的部分合并在一起。...

    排序算法的时间复杂度分析

    在最好情况下,即待排序的数据已经是有序的,选择排序仍会进行n(n-1)/2次比较,因此其最好情况时间复杂度为O(n^2)。在最坏情况下,即待排序的数据完全逆序,选择排序同样需要进行n(n-1)/2次比较,时间复杂度同样是O...

    比较各种排序的复杂度_比较各种排序复杂度_源码

    归并排序的时间复杂度总是O(n log n),但由于涉及到额外的空间开销,空间复杂度为O(n)。 6. 堆排序 (Heap Sort) 堆排序利用了完全二叉树的特性,将待排序序列构造成一个大顶堆或小顶堆,然后将堆顶元素与末尾元素...

    时间复杂度

    - **插入排序**:在最好情况下(当输入已经是排序好的)时间复杂度为O(n),但在最坏和平均情况下,时间复杂度均为O(n^2)。 - **选择排序**:无论是最好情况还是最坏情况,选择排序的时间复杂度都是O(n^2)。 - **堆...

    排序算法比较 时间复杂度 稳定性描述

    - 时间复杂度为 O(d * (n + k)),其中 d 是最大数字的位数,n 是待排序元素的数量,k 是基数。 **稳定性**:基数排序是稳定的排序算法。 **应用场景**:适用于整数或字符串排序,特别是当待排序元素的范围较小且...

    快速排序与归并排序的时间复杂度分析

    归并排序则提供了一种稳定且始终如一的O(n log n)时间复杂度,但需要更多的辅助空间。在实际应用中,选择哪种排序算法取决于具体的需求,例如是否需要稳定性、可用的内存资源以及预期的输入特性。 总的来说,快速...

    排序算法与时间复杂度得测量

    它们不是基于比较的排序算法,因此在某些情况下能实现线性时间复杂度O(n)。 为了衡量这些算法的效率,我们通常使用时间复杂度作为评估标准。时间复杂度表示算法运行所需时间与输入规模之间的关系。在C++编程中,...

    冒泡排序与合并排序的时间复杂度比较

    由于每次划分都是对半分,且每次合并的时间复杂度为O(n),所以合并排序的时间复杂度为O(n log n)。无论输入序列的初始顺序如何,合并排序都保持这个时间复杂度,具有较高的稳定性。 在实际应用中,冒泡排序由于其O...

    排序算法时间复杂度的研究

    - **插入排序**: 平均/最好/最坏时间复杂度分别为O(n^2)、O(n)、O(n^2),空间复杂度为O(1)。 - **希尔排序**: 平均/最坏时间复杂度介于O(nlogn)至O(n^2)之间,具体取决于增量序列的选择,空间复杂度为O(1)。 - **...

Global site tag (gtag.js) - Google Analytics