`

浅谈算法--排序

    博客分类:
  • java
阅读更多

我们工作时候处理数据时候会遇到一些处理数据排序的问题。这里我说两种比较常用的方法:一、冒泡排序法。二、归并排序法。

 

首先来说一下 冒泡排序法:这个方法大家应该还是比较熟悉的。核心思想是下面的一段代码——————

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

for(int j=0;j<list.lenght-i;j++){

if(list[j]>list[j+1]){

swap list[j] with list[j++]

}

}

}

 

这是核心代码段,思想就是从数组的第一个数据开始和后面比较小的不动,大的后移。直到循环结束。有时候会觉得这个比较耗时间的,其实我们可以稍微的改进一下,在某些情况下会提高不少效率。例子如下:

/*
冒泡排序法
*/
public class BubbleSort
{
public static void main(String[] args)
{
//System.out.println("Hello World!");
int[] list = {7,4,8,2,5,9,-1,38,3};
bubbleSort(list);
for(int i=0;i<list.length;i++){
System.out.println(list[i]);
}
}

public static void bubbleSort(int[] list){
boolean needNextPass = true;
for(int i = 1;i< list.length && needNextPass;i++){
for(int j=0;j<list.length-i;j++){
if(list[j]>list[j+1]){
int tmp = list[j];
list[j] = list[j+1];
list[j+1] = tmp;
needNextPass = true;
}

}
}
}

}

 

上面的这个例子只是加一个参数来判断,但是由于这个参数,会在大多数的情况下,使程序的效率大大的提高了。

 

然后我们来说一下一个大家可能不是很熟悉的 归并排序法。核心思想就是二分法:

具体代码如下

/*
归并排序
*/
public class MergeSort
{
public static void main(String[] args)
{
int[] list = {2,3,2,5,6,1,-2,3,14,12};
mergeSort(list);
for(int i=0;i<list.length;i++){
System.out.print(list[i]+" ");
}

}
//迭代分组
public static void mergeSort(int[] list){
if(list.length>1){
int[] firstHalf = new int[list.length/2];
System.arraycopy(list,0,firstHalf,0,list.length/2);
mergeSort(firstHalf);

int secondHalfLength = list.length - list.length/2;
int[] secondHalf = new int[secondHalfLength];
System.arraycopy(list,list.length/2,secondHalf,0,secondHalfLength);
mergeSort(secondHalf);

int[] temp = merge(firstHalf,secondHalf);
System.arraycopy(temp,0,list,0,temp.length);
}
}
//合并数组
public static int[] merge(int[] list1,int[]list2){
int[] temp = new int[list1.length+list2.length];

int current1 = 0;
int current2 = 0;
int current3 = 0;

while(current1<list1.length && current2<list2.length){
if(list1[current1]<list2[current2]){
temp[current3++] = list1[current1++];
}else{
temp[current3++] = list2[current2++];
}
}

while(current1<list1.length){
temp[current3++] = list1[current1++];
}
while(current2<list2.length){
temp[current3++] = list2[current2++];
}

return temp;
}


}

 

效率的话 我就简单的将结果说一下,因为具体测试效率是有一套测试的,具体可以自己去网上找找;

 

归并的效率高于冒泡的效率。

分享到:
评论

相关推荐

    IOI国家集训队论文集1999-2019

    # 国家集训队论文列表(1999-2019) ... - _国家集训队论文列表(1999-2019)_ ...杨 弋 -《从“小H的小屋”的解法谈算法的优化》 朱晨光 -《浅析倍增思想在信息学竞赛中的应用》 李羽修 -《Hash函数的设计优化》 ...

    浅谈插入排序算法在Python程序中的实现及简单改进

    插入排序是一种基础且直观的排序算法,其工作原理类似于打扑克牌时整理手牌的过程。在Python中,插入排序可以通过创建一个已排序的部分和一个未排序的部分来实现。当未排序部分的元素与已排序部分的元素进行比较并...

    浅谈2路插入排序算法及其简单实现

    2路插入排序是一种改进的插入排序算法,它在直接插入排序的基础上增加了辅助数组,目的是减少数据元素在原数组中的移动次数。直接插入排序在插入新元素时,可能会导致已排序部分的元素频繁后移,而2路插入排序通过...

    计算机算法浅谈.pdf

    典型的分治算法有快速排序、归并排序和大整数乘法等。 2. 动态规划算法:它通过将问题分解为相互重叠的子问题来求解,保存子问题的解以避免重复计算。经典的动态规划问题包括最短路径问题、背包问题和最长公共子...

    js 浅谈(树--信息是从数据库中动态获取)

    今天我们要浅谈的主题是“树”,这是一种非常重要的数据结构,特别是在动态获取信息时,如从数据库中读取数据。树结构能够有效地帮助我们管理和操作数据,提高程序的性能。 首先,我们需要理解什么是“树”。在...

    浅谈快速排序算法的改进 (2012年)

    快速排序是冒泡排序经改进之后的一种新的排序方法。拥有速度快,原地排序等特点,本文主要探讨了对原始的快速排序的一些改进的想法,提高其效率。

    徐持衡《浅谈几类背包题》

    《浅谈几类背包题》是由徐持衡撰写的一篇关于算法解题的文章,主要针对ACM(国际大学生程序设计竞赛)中常见的背包问题进行深入探讨。在这篇文章中,徐持衡老师详细讲解了几种经典的背包问题及其解题策略,包括0-1...

    浅谈计算机学习方法

    【浅谈计算机学习方法】 计算机学习是一门涵盖广泛领域的学科,包括理论、硬件、软件、网络及应用等多个方面。为了高效地掌握计算机知识,我们需要树立正确的学习观念,并设定明确的学习目标。 首先,我们要确立...

    浅谈python常用程序算法

    本文将深入探讨三种常见的排序算法:冒泡排序、选择排序和插入排序,这些都是Python初学者和进阶者需要掌握的基础知识。 1. **冒泡排序**: 冒泡排序是一种简单直观的排序算法,它重复地遍历要排序的列表,比较每...

    国家集训队论文3

    排序算法是编程的基础,包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。它们各自有优缺点,理解其原理能帮助我们在不同场景下做出合适的选择。 线性和非线性结构是数据结构的两大类。线性结构如数组、...

    浅谈Python实现贪心算法与活动安排问题

    这里可以使用冒泡排序,但实际应用中更常见的是使用更高效的排序算法,如快速排序或归并排序。 3. 创建一个布尔列表`a`,用于记录每个活动是否被选中。初始化时,选择第一个活动。 4. 从第二个活动开始遍历,检查...

    浅谈javascript实现八大排序

    排序算法,分为内部排序和外部排序。内部排序要使用内存,这里只探讨内部排序。 1,插入排序:直接插入排序和希尔排序 2,选择排序:简单选择排序和堆排序 3,交换排序:冒泡排序和快速排序 4,归并排序 5,基数排序...

    浅谈MySQL排序原理与案例分析

    本篇文章将深入探讨MySQL的排序优化策略以及其内部的排序算法。 首先,排序优化通常依赖于索引的使用。索引是一种数据结构,使得数据库可以快速访问特定的数据行。当在需要排序的字段上创建了索引,MySQL可以利用...

    浅谈JAVA实现选择排序,插入排序,冒泡排序,以及两个有序数组的合并

    这些排序算法都是基本的排序算法,每种算法都有其特点和应用场景。 首先,选择排序是一种简单的排序算法。其主要思想是每次选择最小的元素,并将其放置在正确的位置。下面是JAVA实现选择排序的代码: ```java ...

    浅谈对象数组或list排序及Collections排序原理

    `ComparableTimSort`是一个高效的排序算法,它基于Tim Peters的TimSort算法,这是一种稳定的排序算法,结合了归并排序和插入排序的特点。在排序过程中,`ComparableTimSort`会进行二分查找(binary sort)来确定元素...

    浅谈设计获胜策略分析.doc

    3. **问题排序与优先级**:根据解决问题所需时间和难度,将问题排序。优先处理熟悉且简单的题目,再逐渐转向不熟悉和复杂的。 4. **编程步骤**: - 确定算法:选择合适的算法是解决问题的关键。 - 构造测试数据:...

    浅谈关于能量管理系统

    这是对EM S 应用软件的源程序、画面和数据库进行改造, 调节改变有关算法的控制参数, 使运行人员可以直接在EM S 监视器画面上对状态估计和调度员潮流等模块计算的过程和计算的收敛精度进行控制。 3. 4 EMS 计算结果...

Global site tag (gtag.js) - Google Analytics