常用数组排序方法

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

数组线性查找:又称顺序查找。在一列给定的数值进行搜索,从一端开始逐步检查每个元素,直到找到所需元素的过程代码如下:
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]);        }    }}
时间: 2024-10-17 04:27:32

常用数组排序方法的相关文章

常用数组方法

js与jquery常用数组方法总结 昨天被问数组方法的时候,问到sort()方法是否会改变原来的数组.本来我猜是不会,也是这么说,马上我又觉得,知识这种东西,不确定的时候直接说不确定或不知道就好,只是凭借着不确定的猜测或者是记忆,害人害己,于是我又回答不知道.结果果然...我记错了0.0 还是自己总结测试一下比较靠谱,印象也比较深刻.欢迎大家提出相关意见或建议,提前谢谢哈~ 一.原生js方法 1.遍历数组 in(同时也是对象遍历属性的方法) var a = [1, 2, 3]; for (x i

Array 对象常用的方法总结

shift:删除原数组的第一项,返回删除元素的值:如果数组为空则返回undefined var arr = [1, 2, 3, 4, 5]; var out = arr.shift(); console.log(arr); //[2,3,4,5] console.log(out); //1 var arr = []; var out = arr.shift(); console.log(arr); //[] console.log(out); //undefined unshift:将参数添加到

js与jquery常用数组方法总结

转载:http://www.cnblogs.com/codetker/p/4676899.html 昨天被问数组方法的时候,问到sort()方法是否会改变原来的数组.本来我猜是不会,也是这么说,马上我又觉得,知识这种东西,不确定的时候直接说不确定或不知道就好,只是凭借着不确定的猜测或者是记忆,害人害己,于是我又回答不知道.结果果然...我记错了0.0 还是自己总结测试一下比较靠谱,印象也比较深刻.欢迎大家提出相关意见或建议,提前谢谢哈~ 一.原生js方法 1.遍历数组 in(同时也是对象遍历属性

VC的常用调试方法

前言 VS是非常强大的IDE,所以掌握VSVC的常用方法,将会使得我们找出问题解决问题事半功倍. 目录 VSVC的常用调试方法 前言 1. Watch窗口查看伪变量 2. 查看指针指向的一序列值 3. 内存泄露查找 4. 调试Release版本 5. 远程调试 6. 函数断点 7. 数据断点. 8. 代码执行时间 9. 格式化数据 10. 格式化内存 Watch窗口查看伪变量 按MSDN的介绍,伪变量就是用来查看特定信息的术语.例如当调用的API失败时,可以用GetLastError获取对应的错

NSDictionary的初始化和一些常用的方法总结

NSDictionary //初始化1. NSDictionary *dic11=[[NSDictionary alloc] initWithObjects:@[@"qwe",@"asd",@"zxc",@"qaz",@"wsx"] forKeys:@[@"111",@"222",@"333",@"444",@"555

LINQ常用扩展方法

下面的方法都是IEnumerable<T>的扩展方法: Average计算平均值: Min最小元素:Max最大元素:Sum元素总和: Count元素数量: Concat连接两个序列://Unoin all Contains序列是否包含指定元素: Distinct取得序列中的非重复元素: Except获得两个序列的差集: Intersect获得两个序列的交集: First取得序列第一个元素: Single取得序列的唯一一个元素,如果元素个数不是1个,则报错:!!!严谨的程序. FirstOrDe

黑马程序员_学习IOS之字典常用的方法

字典是无序的 数组是有序的.字典分为:可变字典和不可变字典  不可变字典对象 NSDictionary * dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3",@"four",@"4", nil]; //value = ke

SqlServer 常用分页方法总结

SqlServer 常用分页方法总结 下面示例总结了,SqlServer数据库 常用分页方法,仅供学习参考 A. 使用 RowNumber 和 Between And 组合分页: /********** 使用 RowNumber 和 Between And 组合分页 **********/ CREATE PROC proc_FuzzySearchAndPaging @pageIndex int, --页索引 @pageSize int, --页大小 @SearchKey Nvarchar(10)

Javascript 常用扩展方法

这篇文章纯粹是为了保存这些方法,供以后翻阅,其实一直保存在 evernote 里面,但觉得还是放到对的地方会好点. 现在收录的很少,希望以后会慢慢增多. 数组扩展 contains,remove 扩展 1 function ArrayContains(array, obj) { 2 for (var i = 0; i < array.length; i++) { 3 if (array[i] === obj) { 4 return true ; 5 } 6 } 7 return false ;