`
学习从点滴开始
  • 浏览: 4467 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

你还在用冒泡排序?学习从点滴开始(原创)

阅读更多

数组排序是大家经常遇到的问题,从面试,工作中各个情况遇到的时候很多,往往遇到排序,首先想到的是冒泡,可能冒泡排序的时间复杂性是O的两次幂,性能很差,对于小数组排序还算可以,但是大数据比较性能就不敢恭维了
            今天要给大家讲的是一个其他的办法-----------------------二分查找。。。思路是循环数组,每次循环到i的位置的时候,就认为i前面的数组是已经排序过的,然后将i对应的数值插入到i之前的位置,难点就是找到位置,每次选择i的二分之一的位置进行比较,快速定位,也就是说如果i是1024,那么只需要快速定位10次,而且是最糟糕的情况,查到i对应的位置k后,将(k-1)---- i 位置顺移,将i位置的数值放到k的位置,依次继续。。。。。直接上代码吧

package suanfa; 

import java.util.Random; 

public class WZGL { 

public static void main(String[] args) { 

int num = 100000; 

int intC[] = new int[num]; 

int value1=0; 

for (int i = 0; i < num; i++) { 
value1 += new Random().nextInt(num); 
intC[i] = value1; 
} 

int intA[] = new int[num]; 

System.arraycopy(intC, 0, intA, 0, num); 

long time1 = System.currentTimeMillis(); 
paixu(intC); 
long time2 = System.currentTimeMillis(); 


for (int i = 1; i < intA.length; i++) { 

int index = findIndex(intA[i], 0, i - 1, intA); 

int value = intA[i]; 

System.arraycopy(intA, index, intA, index + 1, i - index); 
intA[index] = value; 
} 

long time3 = System.currentTimeMillis(); 
System.out.println(time2 - time1); 
System.out.println(time3 - time2); 

} 

// 冒泡排序 
public static void paixu(int[] iaaa) { 

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

for (int j = i + 1; j < iaaa.length; j++) { 
if (iaaa[j] < iaaa[i]) { 
int aa = iaaa[i]; 
iaaa[i] = iaaa[j]; 
iaaa[j] = aa; 
} 
} 
} 
} 

//二分查找排序 
public static int findIndex(int thisval, int from, int to, int[] thissz) { 

int index = 0; 

if (thissz[from] >= thisval) { 
index = from; 
return index; 
} 

if (thissz[to] <= thisval) { 
index = to + 1; 
return index; 
} 

if (to - from == 1) { 
return to; 
} 

int zhongjian = (to - from) / 2 + from; 

if (thissz[zhongjian] >= thisval) { 
return findIndex(thisval, from, zhongjian, thissz); 
} else { 
return findIndex(thisval, zhongjian, to, thissz); 
} 
} 

} 

 

100000条数据的性能比较:
5749
438

当然数据越大,越明显,测试过100万条数据的比较,二分查找大约40秒,冒泡排序基本就卡着不动了。。。。

 

分享到:
评论

相关推荐

    冒泡排序法 程序 绝对原创

    在学习这个程序时,可以关注以下几个点: 1. 如何定义和初始化数组? 2. 如何实现冒泡排序的两层循环结构? 3. 如何判断并处理未发生交换的情况,以优化算法性能? 4. 控制台输出如何显示排序过程或最终结果? 这个...

    冒泡排序及其改进算法C语言实现 冒泡排序及其改进算法C语言实现 冒泡排序及其改进算法C语言实现

    3进一步改进的冒泡排序,如果在某次冒泡过程中,最后一次进行交换的位置为flag,则表示flag之后的序列已经有序,那么下一次冒泡就无需比较flag之后的序列,即只要比较到flag就可以结束此次冒泡过程。当flag=0时,...

    冒泡排序算法的C++函数模板

    在实际应用中,冒泡排序算法的C++函数模板可以在许多领域中发挥重要作用,例如数据分析、科学计算、机器学习等。在这些领域中,快速、高效的排序算法可以大大提高计算速度和降低计算成本。 冒泡排序算法的C++函数...

    冒泡排序-排序过程 冒泡排序-排序过程

    3. **内层循环**:对于每趟排序,从最后一个元素开始向前比较,如果前一个元素比后一个元素大,则交换这两个元素的位置,并且将 `NoSwap` 设置为 `False`,表示发生了元素交换。 4. **检查标志位**:在每趟排序结束...

    实验3 冒泡排序程序

    冒泡排序是一种基础且经典的排序算法,...在实验3中,你不仅需要实现冒泡排序,还应该尝试分析和理解它的时间和空间复杂度,以及讨论其在不同情况下的优缺点。通过实践,你可以加深对排序算法的理解,并提升编程能力。

    C++语言的算法实现包括插入排序冒泡排序堆排序快速排序

    插入排序是一种简单的排序算法,它的基本思想是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。在C++中,可以使用两层循环实现,外层循环控制未排序部分,内层循环寻找插入...

    c++冒泡排序,从小到大排序或者从大到小

    在探讨C++冒泡排序这一知识点时,我们不仅会深入理解冒泡排序的基本原理、算法实现,还会细致分析如何在C++中灵活运用该算法进行数据的升序或降序排列。冒泡排序是一种简单的排序算法,其基本思想是通过重复地走访待...

    js冒泡排序 js冒泡排序

    js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序...

    java基础冒泡排序.ppt

    冒泡排序详解,简单而详细的讲清楚了,什么是冒泡排序。 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首...

    Verilog实现冒泡排序

    在数字电路设计中,Verilog是一种被广泛使用的硬件描述语言(HDL)。它允许工程师使用文本描述来设计复杂的电子系统,这些系统随后可以通过硬件综合过程转换成实际的电路。冒泡排序是一种基础的计算机排序算法,它的...

    冒泡排序MFC实现

    你需要在CDialog的DoDataExchange函数中处理数据输入,然后在按钮的点击事件处理函数中执行冒泡排序和结果显示。 通过这个MFC实现的冒泡排序,我们可以学习到如何结合MFC的控件和事件处理机制来实现用户交互,同时...

    基于C++冒泡排序法

    冒泡排序法是一种基础但重要的排序算法,尤其在学习数据结构和算法的初期阶段,它为理解排序原理提供了直观的示例。C++是广泛应用于系统编程、应用编程、游戏开发等多个领域的强大编程语言,因此用C++实现冒泡排序是...

    LabView 冒泡排序实现

    初学LabelView写的冒泡排序。 随机产生数组元素,并进行冒泡排序。

    冒泡排序和选择排序_C语言_冒泡排序_选择排序_

    冒泡排序和选择排序是两种基础的排序算法,在计算机科学中有着广泛的应用,尤其是在学习编程语言如C语言时,理解并能实现这两种排序算法是非常重要的。下面将详细讲解这两种排序方法以及它们在C语言中的实现。 **...

    读懂冒泡排序

    冒泡排序属于比较排序算法,其在实现时使用了简单的双层循环来完成排序操作。在每一轮遍历中,算法会比较相邻的两个元素,如果顺序错误(即前一个数大于后一个数),就将这两个数进行交换。通过这种方式,每一遍的...

    冒泡排序 的动态演示 动画 C++写

    这个程序不仅会进行排序,还会以动画的形式展示排序的过程,帮助用户直观地理解冒泡排序的工作原理。 首先,我们要理解冒泡排序的基本思想。冒泡排序的基本操作是对比相邻的两个元素,如果它们的顺序错误(即前者...

    冒泡排序运行结果

    以下是使用Python语言实现的冒泡排序示例代码: ```python def bubble_sort(arr): n = len(arr) # 遍历所有数组元素 for i in range(n): # 最后i个元素已经就位 for j in range(0, n-i-1): # 如果当前元素...

    C语言排序算法---冒泡排序法

    在实际应用中,冒泡排序效率较低,时间复杂度为O(n^2),对于大数据量或性能要求高的场景,通常会选择其他更高效的排序算法,如快速排序、归并排序或堆排序等。然而,由于其简单易懂,冒泡排序在教学和理解排序算法...

    冒泡排序练习题1

    冒泡排序是一种基础的排序算法,它通过重复遍历待排序的序列,比较相邻的元素并根据需要交换它们,直到序列变得有序。本题涉及多个关于冒泡排序及其变种的应用题目。 1. 第一段代码段是冒泡排序的一个简化版本,只...

    java 冒泡排序 数组冒泡排序

    冒泡排序是一种基础且经典的排序算法,它通过不断交换相邻两个元素的位置,使得每一次遍历都能将当前未排序部分的最大(或最小)元素“冒”到已排序部分的末尾。在Java编程语言中,我们可以很容易地实现这个算法。...

Global site tag (gtag.js) - Google Analytics