A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wing-SF 中级黑马   /  2015-7-11 19:44  /  502 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

反反复复学习了很多变,但总是忘记,这次一点一点写下来,一定要记住,保持很久很久很久很久很久很久很久很久很久很久很久很久很久很久很久很久很久很久

1.选择排序:
思路:
         1.首先拿数组中第一个元素依次与除其自身外的其他每个元素顺序比较,如果第一个元素大于剩下的某个元素,就互换内容
         2.经过第一轮的比较之后,此时,第一个元素就是数组中的最小的元素,然后再拿第二个元素与除第一个元素和其自身的元素进行比较,如果第二个元素大于剩下的某个元素,就交换内容。本次循环结束时,第二个元素就是数组中倒数第二小的元素。
         3.以此类推,到最后一个元素。
代码:
public class ArrSortTest {
        public static void main(String[] args) {
                //数组初始化
                int[] arr={89,34,-270,17,3,100};
                System.out.println("before selectSort:");
                printArr(arr);
                selectSort(arr);//选择排序
                System.out.println("after selectSort:");
                printArr(arr);        //打印数组
        }
       
        public static void selectSort(int[] arr){
                for (int i = 0; i < arr.length; i++) {
                       //使用num记录比较过程中,最小的元素值
                      //使用index记录比较过程中,最小元素的角标值
                        int num=arr[i];
                        int index=i;
                        for (int j = i+1; j < arr.length; j++) {
                                //如果有元素更小,更新num值和index值
                                if(num>arr[j]){
                                        num=arr[j];
                                        index=j;
                                }               
                        }
                        //判断index的值是否改变,如果没有改变,则说明该值最小;如果改变,则将起始位与最小的元素交换内容
                        if(index!=i)
                                swap(arr,i,index);
                       
                }
        }
        //打印数组的方法
        public static void printArr(int[] arr){
                System.out.printf("[");
                for (int i = 0; i < arr.length; i++) {
                        if(i!=arr.length-1)//如果到了最后一个元素,就打印元素值+“】”
                                System.out.printf(arr[i]+",");
                        else
                                System.out.printf(arr[i]+"]");
                }
                System.out.println();
        }
        //交换俩个元素值的方法
        public static void swap(int[] arr,int i,int index){/*此处有一个问题,希望路过的大神可以帮帮忙,像这样参数名字的定义,要不要这么写,增强阅读性呢,还是参数列表写(int[] arr,int a,int b)就可以,希望有经验的可以给指点下迷津。*/
                int temp=arr[i];
                arr[i]=arr[index];
                arr[index]=temp;
        }

}



2.冒泡排序
思路:
         1.首先在第一轮排序中,数组从第一个元素到第二个元素依次与其右边的元素进行比较,如果左边的元素大于右边的元素,那么俩个元素就交换。
         2.经过第一轮比较,最大的元素就已经存储到数组最右边的结点中了
         3.第二轮排序则是从第一个元素到倒数第三个元素依次与其右边的元素进行比较,如果左边的元素大于右边的元素,那么俩个元素就互换
         4.依照此方式,一直到只有第一个和第二个元素互相比较而结束

代码:
public class BubbleSortTest {
       public static void main(String[] args) {
                int[] arr = { 89, 35, -270, 17, 3, 100 };
                System.out.println("befor sort");
                printSort(arr);
                bubbleSort(arr);
                System.out.println("after sort");
                printSort(arr);
        }
        public static void printSort(int[] arr) {
                System.out.printf("[");
                for (int i = 0; i < arr.length; i++) {
                        if(i!=arr.length-1)
                                System.out.printf(arr[i]+",");
                        else
                                System.out.printf(arr[i]+"]");
                }
                System.out.println();
        }
        public static void bubbleSort(int[] arr) {//还是没办法很清楚的说出,内层循环和外层循环到底控制哪些变量。
                for (int i = 0; i < arr.length - 1; i++) {
                        for (int j = 0; j < arr.length - 1 - i; j++) {
                                if (arr[j] > arr[j+1]) {
                                        int temp = arr[j];
                                        arr[j] = arr[j+1];
                                        arr[j+1] = temp;
                                }
                        }
                }
        }
}



8 个回复

倒序浏览
学习就是多练,熟能生巧吧!!!!
回复 使用道具 举报
理解思路,慢慢掌握,死记肯定会忘的,我觉得最主要的上掌握思路
回复 使用道具 举报
http://developer.51cto.com/art/201206/345156.htm

可以看看这个扩展一下
回复 使用道具 举报
老师每天都有录像 还有笔记  多看看吧
回复 使用道具 举报
熟能生巧,慢慢练习,多练习
回复 使用道具 举报
多多练习
回复 使用道具 举报
一起学习,一起努力,加油
回复 使用道具 举报
wgy 中级黑马 2015-7-11 23:24:03
9#
这个挺有用的,面试可能有遇到,学习学习。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马