`

数组排序总结(java代码)

    博客分类:
  • Java
阅读更多
import java.lang.Math;   
import java.util.Random;   
  
/**  
 * 排序  
 *     
 */  
public class OrderTest {   
  
    public static void main(String args[]) {   
        OrderTest.ExecOrder(2);   
    }   
  
    /**  
     * 交换值,交换数组的两个值  
     * @param array  
     * @param i  
     * @param j  
     */  
    private static void swap(int[] array,int i, int j)   
    {   
        int tmp = array[i];   
        array[i] = array[j];   
        array[j] = tmp;   
    }      
       
    /**  
     *   
     * @param method  
     *            1为升序,2为降序  
     */  
    public static void ExecOrder(int method) {   
        int[] array = null;   
        array = initArray(10, 210, 10);   
           
         //int[] orderarray = bubbleOrder(array,method);   
        int[] orderarray = doubleBubbleOrder(array,method);   
        //int[] orderarray = insertOrder(array, method);   
        //int [] orderarray = quickOrder(array,method);   
        //int[] orderarray = selectOrder(array, method);   
        for (int i = 0; i < orderarray.length; i++) {   
            System.out.println(orderarray[i]);   
        }   
    }   
  
    /**  
     * 取随机数据,初始化一个数组  
     *   
     * @param min  
     *            随机数的最小值  
     * @param max  
     *            最大值  
     * @param size  
     *            取得随机数的数量  
     * @return  
     */  
    public static int[] initArray(int min, int max, int size) {   
        int[] init = new int[size];   
  
        for (int i = 0; i < size; i++) {   
            Random ra = new Random();   
            init[i] = min + (int) (Math.random() * (max - min + 1));   
            System.out.println(i + "-------" + init[i]);   
        }   
        return init;   
    }   
  
    /**  
     * 交换排序方法  
     * 原理:依次交换值  
     * @param array  
     * @return  
     */  
    public static int[] convertOrder(int[] array, int method) {   
        for (int i = 0; i < array.length; i++) {   
            for (int j = i + 1; j < array.length; j++)    
            {   
                if (method==2)   
                {   
                    if (array[i] < array[j])    
                        swap(array,i,j);   
                }else if (method == 1) {   
                    if (array[i] > array[j])    
                        swap(array,i,j);   
                }   
            }   
        }   
        return array;   
    }   
  
    /**冒泡排序方法  
     * 原理:从最后一个开始将小的或大的逐渐冒出  
     * @param array  
     * @param method  
     * @return  
     */  
    public static int[] bubbleOrder(int[] array,int method)   
    {   
        for(int i=0;i<array.length;i++)   
        {   
            for (int j=array.length -1 ;j>i;j--)   
            {   
                if (method==2)   
                {   
                    if (array[i] < array[j])   
                        swap(array,i,j);   
                }else if (method==1)   
                    if (array[i] > array[j])   
                        swap(array,i,j);   
            }   
        }   
        return array;   
    }   
 
 
    /**  
     * 双向冒泡排序  
     * 原理:类似于冒泡排序,只不过是双向的  
     * @param array  
     * @param method  
     * @return  
     */  
    public static int[] doubleBubbleOrder(int[] array,int method)   
    {   
        int left = 0;   
        int right = array.length -1 ;   
        while (left < right)   
        {   
            for(int i=left;i<=right;i++)   
            {   
                if (method==1)   
                {   
                    if (array[left] > array[i])   
                        swap(array,left,i);   
                }else  
                {   
                    if (array[left] < array[i])   
                        swap(array,left,i);   
                }   
            }   
               
            for (int i=left+1;i<=right;i++)   
            {   
                if (method==1)   
                {   
                    if (array[right] < array[i])   
                        swap(array,right,i);   
                }else  
                {   
                    if (array[right] > array[i])   
                        swap(array,right,i);   
                       
                }   
            }   
            left++;   
            right--;   
        }   
        return array;   
    }   
       
    /**  
     * 快速排序方法,运用到递归  
     * 排序原理:随机找到一个值,然后以此值大小进行分为两个数组,大的放左边,小的放右边,  
     * 然后再对左右两侧的数据依次排序根据  
     * @param array  
     * @param method  
     * @return  
     */  
    public static int[] quickOrder(int[] array, int method)    
    {   
        quickDeal(array,0,array.length - 1,method);   
        return array;   
    }   
  
    /**  
     *   
     * @param array  
     * @param begin  
     *            开始位置  
     * @param end  
     *            结束位置  
     */  
    private static void quickDeal(int[] array, int begin, int end,int method) {   
        if (end > begin) {   
            int pos = begin + (int) (Math.random() * (end - begin + 1)); // 计算分隔位置   
            int posvalue = array[pos]; // 取得分隔位置的值   
            swap(array,pos,end); //将posvalue放到最end的位置   
            pos=begin; //初始化pos   
            for (int i=begin; i < end; i++) {   
                if (method==1)   
                {      
                    if (array[i] < posvalue) { //当小于posvalue时,将此值移动到pos位置,也就是向前移动   
                        swap(array,pos,i);    
                        pos++; //移动后pos增1   
                    }   
                }else if(method == 2)   
                {   
                    if (array[i] > posvalue) { //当小于posvalue时,将此值移动到pos位置,也就是向前移动   
                        swap(array,pos,i);    
                        pos++; //移动后pos增1   
                    }   
                }   
            }   
            swap(array,pos,end); //end位置的值前移   
            quickDeal(array,begin,pos -1,method);   
            quickDeal(array,pos+1,end,method);   
        }   
  
    }   
  
    /**  
     * 插入排序方法  
     * 排序原理:抽出一个数,做为排序基序列,然后依次抽出其它数与,与此序列中的数进行比较,放入合适的位置  
     * @param array  
     * @param method  
     * @return  
     */  
    public static int[] insertOrder(int[] array, int method) {   
  
        for (int i = 1; i < array.length; i++) {   
            if (method == 1) {   
                if (array[i - 1] > array[i]) {   
                    int tmp = array[i]; //   
                    int j = i - 1;   
                    do {   
                        array[j + 1] = array[j];   
                        j--;   
                    } while (j >= 0 && tmp < array[j]); //当j>=0并且 当前值大于数据中j位置的值时移动   
                    array[j + 1] = tmp; //插入排序值   
                }   
            } else if (method == 2) {   
                if (array[i - 1] < array[i]) {   
                    int tmp = array[i];    
                    int j = i - 1;   
                    do {   
                        array[j + 1] = array[j];   
                        j--;   
                    } while (j >= 0 && tmp > array[j]);   
                    array[j + 1] = tmp;   
                }   
            }   
        }   
        return array;   
    }   
  
    /**  
     * 选择排序方法  
     * 排序原理:每次选择一个最大的或最小的数放到已排序序列中  
     * @param array  
     * @param method  
     * @return  
     */  
    public static int[] selectOrder(int[] array,int method)   
    {   
        for (int i=0;i<array.length - 1;i++)    
        {   
            int tmp = array[i];   
            int pos = i+1; //记录大值或小值的位置    
            for (int j=i+1;j<array.length;j++)   
            {   
                if (method==1)   
                {   
                    if (array[j]<tmp)   
                    {   
                        tmp = array[j];   
                        pos= j ;//记录大值或小值的位置   
                    }   
                }else if (method==2)   
                {   
                    if (array[j]>tmp)   
                    {   
                        tmp = array[j];   
                        pos= j ;//记录大值或小值的位置   
                    }   
                }   
            }   
            if (tmp != array[i])   
                swap(array,i,pos); //不相同时交换   
        }   
        return array;   
    }   
       
}  

 

分享到:
评论

相关推荐

    java数组排序

    在Java编程语言中,数组排序是一项基础且重要的任务。它涉及到不同的算法,这些算法通过比较和交换元素来达到数组元素的有序状态。本篇将详细探讨几种常见的排序算法及其在Java中的实现。 首先,让我们从最简单的...

    数组排序(java代码).docx

    ### 数组排序(Java代码) #### 一、冒泡排序算法概述 冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,依次比较两个相邻元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行的,直到...

    java数组排序冒泡排序源代码

    java冒泡排序 代码为排序源代码 简洁明了 无其他

    [Java算法设计]-数组排序.java

    这份资源提供了Java数组排序的全面指南。该文档涵盖了数组排序的基本概念,包括如何实现各种排序算法,如冒泡排序、选择排序、插入排序、归并排序和快速排序。此外,文档还为每个排序算法提供了详细的代码示例和实现...

    java多维数组排序(代码)

    题目: 假定本学期某班上有5门课,该班上有10人 (1) 请输入该班同学的学号,姓名,5门课的成绩至数组A、B中,再按5门课的总分排序,然后列出排序后的序号,学号,姓名,成绩1~5; (2) 求出5门课的平均成绩

    java-区分数字元素和字符串元素的数组排序-代码

    Java 数组排序与分离数字元素和字符串元素的代码实现 Java 是一种广泛使用的编程语言,拥有强大的功能和灵活的应用场景。数组排序是 Java 编程中的一种常见操作,而在实际应用中,数组元素可能包含数字字符串和字符...

    数组以及排序算法

    在编程领域,数组和排序算法是基础且至关重要的概念,特别是在Java编程中。数组是一种数据结构,它允许我们在内存中存储相同类型的数据项,并通过索引来访问这些元素。理解数组和掌握高效的排序算法对于编写高性能的...

    java_二维数组冒泡行列排序源代码

    使用冒泡排序实现的java语言编写的关于二维数组的排序,实现了行、列的排序输出。

    二维数组如何进行冒泡排序

    ### 二维数组冒泡排序详解 #### 一、引言 冒泡排序是一种简单的排序算法,在数据处理领域有着广泛的应用。对于一维数组而言,冒泡排序实现起来...希望本文能够帮助初学者更好地理解二维数组排序的原理和实现细节。

    Java数组排序总结(冒泡_选择_插入_希尔)__递归算法的复杂度

    在编程领域,数组排序是基础且重要的操作,尤其是在Java中。本篇文章将深入探讨四种基本的排序算法:冒泡排序、选择排序、插入排序以及希尔排序,并结合递归算法的复杂度进行分析。这些排序算法在不同的场景下有不同...

    Java5.0数组排序

    1. 对基本类型数组排序:在Java 5.0中,`Arrays.sort()`可以直接用于整型、浮点型、字符型以及双精度浮点型等基本类型的数组排序,例如`int[]`、`double[]`、`char[]`等。例如: ```java int[] numbers = {5, 3, 8, ...

    java 部分数组递增排序

    3. **实现排序**:根据选择的算法,编写对应的Java代码。例如,使用插入排序,我们可以遍历子数组,将每个元素与其前面已排序的元素比较,如果需要则交换位置。 ```java for (int i = startIndex; i ; i++) { for ...

    java数组排序.docx

    "Java数组排序" Java数组排序是Java语言中对数组进行排序的方法,包括快速排序、选择排序、冒泡排序和插入排序等。这些排序算法都是Java语言中常用的数组排序方法,每种算法都有其特点和应用场景。 冒泡排序是Java...

    java数组排序源代码

    ### Java数组排序源代码分析与理解 #### 一、概览 本文将深入解析一个包含多种排序算法(冒泡排序、选择排序、插入排序、希尔排序)的Java程序,并通过具体的代码实现来帮助读者理解这些排序算法的工作原理及其实现...

    JAVA 对象数组按照多个属性进行排序

    在Java编程中,对象数组排序是一项常见的任务,特别是在处理复杂数据结构时。当我们需要根据对象的多个属性进行排序时,情况会变得稍微复杂。本文将深入探讨如何在Java中实现这个功能,结合给出的标签“源码”和...

    二维数组排序

    本篇介绍了Java中二维数组排序的实现,主要使用了冒泡排序算法,并且确保了排序过程中同一条记录内的元素不会改变其相对位置。这种排序方式适用于类似Excel表格的场景,在实际应用中具有一定的实用价值。

    数组排序中的(选择,冒泡)

    在IT行业中,数组排序是一个基础且重要的概念,广泛应用于数据处理和算法实现。本文将深入探讨两种常见的排序算法——选择排序和冒泡排序,并结合给定的文件信息进行解析。 首先,选择排序是一种简单直观的排序算法...

    JAVA快速,选择,冒泡数组排序

    在编程领域,数组排序是常见的任务之一,尤其是在处理大量数据时。Java作为一种广泛使用的编程语言,提供了多种排序算法供开发者选择。本主题将详细介绍三种基本的排序算法:快速排序、选择排序和冒泡排序,以及它们...

    文件读出数组进行选择排序和二分查找(java)

    5. **Test1.java**:这可能是一个实现上述功能的Java源代码文件,包含读取文件、处理数组、选择排序以及二分查找的逻辑。通过查看这个文件的源代码,可以学习到如何在实际项目中应用这些概念。 6. **使用前请看一下...

    Java数组相关的例子代码

    本篇将深入探讨Java数组的相关知识点,并通过实际的例子代码来加深理解。 1. **数组的声明与初始化** 在Java中,我们可以声明一个数组并同时初始化它。例如,创建一个包含5个整数的数组: ```java int[] ...

Global site tag (gtag.js) - Google Analytics