冒泡排序
是一种简单的排序算法。它反复地走訪过要排序的数列,一次比較两个元素。假设他们的顺序错误就把他们交换过来。走訪数列的工作是反复地进行直到没有再须要交换,也就是说该数列已经排序完毕。

这个算法的名字由来是由于越小的元素会经由交换慢慢“浮”到数列的顶端。


public class BubbleSort{

     public static void main(String[] args){

         int score[] = {67, 69, 75, 87, 89, 90, 99, 100};

         for (int i = 0; i < score.length -1; i++){    //最多做n-1趟排序

             for(int j = 0 ;j < score.length - i - 1; j++){    //对当前无序区间score[0......length-i-1]进行排序(j的范围非常关键,这个范围是在逐步缩小的)

                 if(score[j] < score[j + 1]){    //把小的值交换到后面

                     int temp = score[j];

                     score[j] = score[j + 1];

                     score[j + 1] = temp;

                 }

             }            

             System.out.print("第" + (i + 1) + "次排序结果:");

             for(int a = 0; a < score.length; a++){

                 System.out.print(score[a] + "\t");

             }

             System.out.println("");

         }

             System.out.print("终于排序结果:");

             for(int a = 0; a < score.length; a++){

                 System.out.print(score[a] + "\t");

        }

     }

 }

高速排序
之所比較快,由于相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点。将小于等于基准点的数所有放到基准点的左边,将大于等于基准点的数所有放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样每次仅仅能在相邻的数之间进行交换,交换的距离就大的多了。

因此总的比較和交换次数就少了,速度自然就提高了。

当然在最坏的情况下,仍可能是相邻的两个数进行了交换。

void quicksort(int left,int right)

{

    int i,j,t,temp;

    if(left>right)

       return;

                                

    temp=a[left]; //temp中存的就是基准数

    i=left;

    j=right;

    while(i!=j)

    {

                   //顺序非常重要,要先从右边開始找

                   while(a[j]>=temp && i<j)

                            j--;

                   //再找右边的

                   while(a[i]<=temp && i<j)

                            i++;

                   //交换两个数在数组中的位置

                   if(i<j)

                   {

                            t=a[i];

                            a[i]=a[j];

                            a[j]=t;

                   }

    }

    //终于将基准数归位

    a[left]=a[i];

    a[i]=temp;

                             

    quicksort(left,i-1);//继续处理左边的,这里是一个递归的过程

    quicksort(i+1,right);//继续处理右边的 ,这里是一个递归的过程

}

插入排序
就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到所有插入完成。

static void insertion_sort(int[] unsorted)
{ for (int i = 1; i < unsorted.Length; i++)
{ if (unsorted[i - 1] > unsorted[i])
{
                  int temp = unsorted[i];                   int j = i;                   while (j > 0 && unsorted[j - 1] > temp)
{
unsorted[j] = unsorted[j - 1];
j--;
}
unsorted[j] = temp;
}
}
}

JAVA基础实例(三)--排序的更多相关文章

  1. Java基础:三步学会Java Socket编程

    Java基础:三步学会Java Socket编程 http://tech.163.com 2006-04-10 09:17:18 来源: java-cn 网友评论11 条 论坛        第一步 ...

  2. java 基础知识三 java变量

    java  基础知识 三 变量 1.作用域 {} 包围起来的代码 称之为代码块,在块中声明的变量只能在块中使用 2.常量 就是固定不变的量,一旦被定义,它的值就不能再被改变. 3.变量 变量必须在程序 ...

  3. Java基础-数组常见排序方式

    Java基础-数组常见排序方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数据的排序一般都是生序排序,即元素从小到大排列.常见的有两种排序方式:选择排序和冒泡排序.选择排序的特 ...

  4. Java实习生常规技术面试题每日十题Java基础(三)

    目录 1.是否可以从一个static方法内部发出对非static方法的调用? 2.Integer与int的区别? 3.Overload和Override的区别.参数列表相同,返回值不同的方法,是否是重 ...

  5. java基础(三章)

    java基础(三章) 一.基本if结构 1.流程图 l  输入输出 l  判断和分支 l  流程线 1.1              简单的if条件判断 if(表达式){            //表 ...

  6. JAVA基础(三)—— 输入输出处理

    JAVA基础(三)-- 输入输出处理 1 输入解析 //Scanner获取输入 import java.util.Scanner; Scanner s = new Scanner(System.in) ...

  7. Java 基础(三)| IO流之使用 File 类的正确姿势

    为跳槽面试做准备,今天开始进入 Java 基础的复习.希望基础不好的同学看完这篇文章,能掌握泛型,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆. 一.什么是 File 类? java ...

  8. 【java基础】选择排序and冒泡排序

    前言 : 今天学习的是J2SE视频里的第五章,数组部分,它里面留了一个经典的作业,就是让我们去从1倒9按一定规格排序,这让我想起了学习vb的时候最最让我头疼的两种排序方法,选择排序法 和 冒泡排序法. ...

  9. java基础系列(三)---HashMap

    java基础系列(三)---HashMap java基础系列 java基础系列(一)---String.StringBuffer.StringBuilder java基础系列(二)---Integer ...

  10. JAVA基础第三章-类与对象、抽象类、接口

    业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...

随机推荐

  1. Spring框架简单介绍

    原文地址:  http://my.oschina.net/myriads/blog/37922 1.使用框架的意义与Spring的主要内容 随着软件结构的日益庞大,软件模块化趋势出现,软件开发也须要多 ...

  2. Redis 的性能幻想与残酷现实(转)

    2011 年,当初选择 Redis 作为主要的内存数据存储,主要吸引我的是它提供多样的基础数据结构可以很方便的实现业务需求.另一方面又比较担心它的性能是否足以支撑,毕竟当时 Redis 还属于比较新的 ...

  3. windows phone 了解LinearGradientBrush类和RadialGradienBrush类(11)

    原文:windows phone 了解LinearGradientBrush类和RadialGradienBrush类(11) 我们了解到在能在xaml中完成的设计,一般在隐藏文件中也可通过代码完成: ...

  4. Python入门(转)

    Python 简洁的语法和对动态输入的支持,再加上解释性语言的本质, 使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发 特点:简单.易学.免费.开源.高层语言.可移植 ...

  5. Spring 事情具体详尽的解释

    一.Spring事务管理  1. Spring事务管理机制 三个核心部分  1) PlatformTransactionManager  平台的事务管理器  commit 提交事务.rollback ...

  6. Leetcode 3Sum Closet

    二手和3Sum像几乎相同的想法.二进制搜索.关键修剪.但是,在修剪做出很多错误. 然后还有一个更加速了原来的想法O(n^2). #include<iostream> #include &l ...

  7. css3仿山猫侧边栏

    演示:http://jsfiddle.net/Adce2/ 其主要思想: 1, 先画边栏html. 2, 使用css3分别财产close sidebar-content动图片. 3, 使用css3的k ...

  8. 怎样配置nginx同一时候执行不同版本号的php-fpm

    在/usr/local/php/etc/php-fpm.conf里找到 listen = 127.0.0.1:9000 将port9000改动为9001 在对应的nginx配置里也做相同的port改动

  9. Windows 8 应用开发 - 本地数据存储

    原文:Windows 8 应用开发 - 本地数据存储      在应用中通常会遇到用户主动或被动存储信息的情况,当应用关闭后这些数据仍然会存储在本地设备上,用户下次重新激活应用时会自动加载这些数据.下 ...

  10. Arduino 数码管LED驱动 数组法

    上个样例讲到驱动LED数码管,採用一种最直接的方案,对每一个LED进行高低电平的控制,这种长处是每一个LED都是受控可检的,避免了因为短路造成的假象,但对于数字变化来说,写起来就很冗余,因此这次尝试用 ...