黑马程序员技术交流社区

标题: 数组应用技巧 [打印本页]

作者: 窗外的雪儿飞    时间: 2015-8-30 22:20
标题: 数组应用技巧
1.最值
思路:
定义一个变量与数组中每个元素做比较,如果大于变量的值,那么将数组的值赋予变量
public static void max(int[] arr)
        {
                 int max=0;
                for (int x = 0;x<arr.length ;x++ )
                {
                        if (arr[x]>max)
                        {
                                max=arr[x];
                        }
                }
                System.out.println("最值是"+max);

        }
作者: 窗外的雪儿飞    时间: 2015-8-30 22:24
2.选择排序
将每个数和数组里其它所有的元素比,让最值一直在最左边,比完一轮,最值不参与下一轮.
public static void chooseSort(int[] arr)
        {
                for (int x=0;x<arr.length-1 ;x++ )
                {
                        for (int y =x+1;y<arr.length ;y++)
                        {
                                if(arr[x]<arr[y])
                                {
                                        swap(arr,x,y);//交换
                                }
                               
                        }
                }
        }
作者: jeska    时间: 2015-8-30 22:31
不错不错,就是有点水贴的嫌疑{:2_30:}
作者: 窗外的雪儿飞    时间: 2015-8-30 22:31
3.冒泡排序
将两个相邻的数组元素进行比较,让所有的最值向右走,每跑一轮,最值不参与下一轮.
public static void bubbingSort(int[] arr)
        {
                for (int x=0;x<arr.length-1;x++)
                {
                        for (int y =0; y<arr.length-x-1;y++ )
                        {
                                if (arr[y]>arr[y+1])
                                {
                                        swap(arr,y,y+1);
                                }
                        }
                }
        }
作者: qiaozengji668    时间: 2015-8-30 22:32
顶一下!!!
作者: sunw    时间: 2015-8-30 22:36
  学习了  
作者: 窗外的雪儿飞    时间: 2015-8-30 22:38
4.选择排序优化
思路:定义一个指针,让其代替其中一个元素下标且去和每其它元素比较,把每一轮元素最值下标赋予指针,每轮结束后得到的就是最值的下标,然后,把最值换到最左边.
public static void chooseSortOptimaze(int [] arr)
        {
                for (int x=0 ;x<arr.length-1 ;x++ )
                {
                        int index =x;
                        for (int y=x+1; y<arr.length;y++ )
                        {
                                if (arr[index]>arr[y])
                                        index=y;
                        }
                        swap(arr,index,x);
                }
        }
作者: 窗外的雪儿飞    时间: 2015-8-30 22:43
5.折半查找
只针对有有序数组
定义三个指针,一个代表开头,一个代表末尾,一个代表中间值.
假设数组从小到大,因为有序,如果数值小于中间数,那么这个数只可能存在于中间数的左边,结尾指针移动到中间指后一位,针反这则在右边,每比完一轮,数少一半,没有找到再比,最终开头下标大于到最后都没有找到.则结束.
public static void reduceSort(int[] arr,int x)
        {
                int start=0,end =arr.length-1,mid=(start+end)/2;
                while (start<=end)
                {
                        if (x==arr[mid])
                        {
                                System.out.println(mid);
                        }
                        if (x<arr[mid])
                        {
                                end=mid-1;
                                mid=(start+end)/2;
                        }
                        if (x>arr[mid])
                        {
                                start=mid+1;
                                mid=(start+end)/2;
                        }
                }
                if (start>end)
                {
                        System.out.println("数组里没有这个数");
                }
        }
作者: hutudan1993    时间: 2015-8-30 22:49
哈哈,这个我学过了呢,好好学哟....加油
作者: hutudan1993    时间: 2015-8-30 22:50
哈哈哈,,,加油做...代码要每天练,
作者: 窗外的雪儿飞    时间: 2015-8-30 23:05
hutudan1993 发表于 2015-8-30 22:49
哈哈,这个我学过了呢,好好学哟....加油

嘿嘿,好哒!我会努力的。
作者: 窗外的雪儿飞    时间: 2015-8-30 23:08
hutudan1993 发表于 2015-8-30 22:50
哈哈哈,,,加油做...代码要每天练,

嗯,谢谢。我每天下课回来还要把当天的复习一下,然后预习一下。完了就是码代码,最后敲一小段时间的金山打字通。发现时间就差不多十二点了
作者: 窗外的雪儿飞    时间: 2015-8-30 23:10
sunw 发表于 2015-8-30 22:36
学习了

互相学习,加油!
作者: 窗外的雪儿飞    时间: 2015-8-30 23:14
qiaozengji668 发表于 2015-8-30 22:32
顶一下!!!

谢谢啦!!
作者: lcq0301    时间: 2015-8-30 23:27
来个归并 快排什么的呗~   




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2