码迷,mamicode.com
首页 > 编程语言 > 详细

常用数组排序方法

时间:2016-08-12 21:25:41      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,
然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的分量,
也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便,
把具有相同类型的若干变量按有序的形式组织起来的一种形式。
这些按序排列的同类数据元素的集合称为数组。
下面查了几本书籍总结的几个常用的数组排序,打打酱油。也希望对大家有帮助


数组线性查找
:又称顺序查找。在一列给定的数值进行搜索,
从一端开始逐步检查每个元素,直到找到所需元素的过程
代码如下
public class Test1 {
    public static void main(String[] args) {
        int[] array={1,2,3,6,4,5};
        System.out.println("请输入你要查询的数");
        Scanner ss= new Scanner(System.in);
        int input= ss.nextInt();
        int index=-1;//因为数组下标是从0开始的,如果下标还是-1说明
        //数组没有找到你输入的值
        for (int i = 0; i <array.length; i++) {

            if (array[i]==input){//判断数组中有输入的数据
                index=i+1;//i表示数组下标 +1说明是数组的位置
                break;
            }
        }
        if (index!=-1){
            System.out.println("在数组中找到了你输入的值,在第"+index+"的位置");
        }else {
            System.out.println("数组中没有你要找到值");
        }
    }
}
二分法查找:又称折半查找法。将数组中间位置记录的关键字与查找关键字比较
如果两者相等 则查找成功;否则利用中间位置记录将数组分成前后2个子数组,
如果中间位置记录的关键字大于查找关键字,则进一步查找前一个子数组,
否则进一步查找后一个子数组。重复以上过程,直到找到或找不到
代码如下:
public class Test2 {
    public static void main(String[] args) {
        int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 33, 55, 88 };
        int first = 0;//起始数
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个数");
        int num = scanner.nextInt();
        int last = array.length - 1;//最后一个数
        int index = -1;
        int middle ;//中间数
        while (last >= first) {
            middle = (first + last) / 2;
            if (array[middle] == num) {
                index = middle;//如果正好猜到中间数
                break;
            }
            if (num > array[middle]) {
                first = middle + 1;//猜的数大于中间数
                //把平分数第一个数赋值之前中间数,再次求平均数
            }
            if (num < array[middle]) {
                last = middle - 1;
            }
        }
        if (index != -1) {
            System.out.println("您要查的数在" + (index + 1) + "位");
        }else{
            System.out.println("抱歉没有找到");
        }
    }
}

 

冒泡排序:比较相邻的元素 如果第一个比第二个大 就交换它们俩位置下标
对每一个相邻元素作同样的工作,从开始第一对到结尾的最后一对。
针对除了最后一个元素以外所有的元素重复以上的步骤。直到没有任何一对数组需要比较。
代码如下:
public class Test4 {
    public static void main(String[] args) {
        int [] array={1,2,3,9,7,6,4,5};
        //N个数比较的轮数为N-1
        for (int i = 0; i < array.length - 1; i++) {
            //每一轮比较的次数为N-1-i;
            for (int j = 0; j < array.length - 1 - i; j++) {
                //比较相邻的两个数 , 小的靠前
                if (array[j]>array[j+1]){
                    //两个数做交换位置 通过设置临时变量
                    int temp= array[j];
                    array[j]=array[j+1];
                    array[j+1]=temp;
                }
            }
        }
        //把排好顺序的数组输出一下
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }


}

 

选择排序法:首先在未排序序列中找到最小元素,
存放到排序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列的末尾。
以此类推 ,直到所有元素均排序完毕
代码如下:

public class Test5 {
    public static void main(String[] args) {
        int[] array={1,3,5,2,6,7,4,9};
        int min=0;//保存最小元素值下标
        for (int i = 0; i < array.length - 1; i++) {
            min=i;//查找最小元素在数组的下标
            for (int j = i+1; j < array.length; j++) {
                if (array[min]>array[j]){
                    min=j;//保存最小数下标
                }
            }
            //如果第i个最小数的位置不在i上则进行交换
            if (i!=min){
                int temp=array[i];
                array[i]=array[min];
                array[min]=temp;
            }
        }
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }

}
插入排序:
* 它是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,
* 找到相应位置并插入。从后向前扫描过程中,需要反复把排序元素逐步向后挪移,
* 为最新元素提供插入空间
代码如下:
public class Test6 {
public static void main(String[] args) {
int[] array= {4,3,6,8,1,7};
for (int i = 0; i < array.length; i++) {

int temp=array[i];
//把下标保存下来
int j=i;
while (j>0&&temp<array[j-1]){
//上面的数覆盖其下面的数
array[j]=array[j-1];
j--;
}
array[j]=temp;//插入数据
}
for (int i = 0; i <array.length; i++) {
System.out.println(array[i]);
}
}
}

 

常用数组排序方法

标签:

原文地址:http://www.cnblogs.com/doubao520/p/5766168.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!