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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

何雨

初级黑马

  • 黑马币:12

  • 帖子:15

  • 精华:0

© 何雨 初级黑马   /  2015-5-21 17:50  /  6777 人查看  /  23 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
请图解排序法各个的由来,每次印象都不深刻,记不清楚

23 个回复

倒序浏览

评分

参与人数 1黑马币 +1 收起 理由
何雨 + 1

查看全部评分

回复 使用道具 举报
排序法一般问的最多也最广泛的就是冒泡法排序,该方法思想就是大的数据往下沉,小的数据往上飘就这磨简单。

另外你想详细了解排序的方法,请参考以下链接,该部分有FLASH详解排序过程
http://www.360doc.com/content/14/0804/11/1073512_399302715.shtml
回复 使用道具 举报
懂冒泡排序,和选择排序就够了,面试中这是最基本的。
回复 使用道具 举报
对呀  经典排序的几种搞定 就行了
回复 使用道具 举报
要清楚的知道,建议学习一下数据结构
回复 使用道具 举报
选择排序:
和冒泡排序:
回复 使用道具 举报
lizhi 中级黑马 2015-5-24 10:39:35
8#
冒泡法最重要
回复 使用道具 举报
(1)、插入排序:直接插入排序、二分法插入排序、希尔排序。    (2)、选择排序:简单选择排序、堆排序。    (3)、交换排序:冒泡排序、快速排序。    (4)、归并排序    (5)、基数排序
回复 使用道具 举报
package com.sort;  2   3 public class 直接插入排序 {  4   5     public static void main(String[] args) {  6         int[] a={49,38,65,97,76,13,27,49,78,34,12,64,1};  7         System.out.println("排序之前:");  8         for (int i = 0; i < a.length; i++) {  9             System.out.print(a[i]+" "); 10         } 11         //直接插入排序 12         for (int i = 1; i < a.length; i++) { 13             //待插入元素 14             int temp = a[i]; 15             int j; 16             /*for (j = i-1; j>=0 && a[j]>temp; j--) { 17                 //将大于temp的往后移动一位 18                 a[j+1] = a[j]; 19             }*/ 20             for (j = i-1; j>=0; j--) { 21                 //将大于temp的往后移动一位 22                 if(a[j]>temp){ 23                     a[j+1] = a[j]; 24                 }else{ 25                     break; 26                 } 27             } 28             a[j+1] = temp; 29         } 30         System.out.println(); 31         System.out.println("排序之后:"); 32         for (int i = 0; i < a.length; i++) { 33             System.out.print(a[i]+" "); 34         } 35     } 36  37 } 复制代码                       package com.sort;  2   3 public class 二分插入排序 {  4     public static void main(String[] args) {  5         int[] a={49,38,65,97,176,213,227,49,78,34,12,164,11,18,1};  6         System.out.println("排序之前:");  7         for (int i = 0; i < a.length; i++) {  8             System.out.print(a[i]+" ");  9         } 10         //二分插入排序 11         sort(a); 12         System.out.println(); 13         System.out.println("排序之后:"); 14         for (int i = 0; i < a.length; i++) { 15             System.out.print(a[i]+" "); 16         } 17     } 18  19     private static void sort(int[] a) { 20         for (int i = 0; i < a.length; i++) { 21             int temp = a[i]; 22             int left = 0; 23             int right = i-1; 24             int mid = 0; 25             while(left<=right){ 26                 mid = (left+right)/2; 27                 if(temp<a[mid]){ 28                     right = mid-1; 29                 }else{ 30                     left = mid+1; 31                 } 32             } 33             for (int j = i-1; j >= left; j--) { 34                 a[j+1] = a[j]; 35             } 36             if(left != i){ 37                 a[left] = temp; 38             } 39         } 40     } 41 } 复制代码          package com.sort;  2   3 //不稳定  4 public class 希尔排序 {  5   6       7     public static void main(String[] args) {  8         int[] a={49,38,65,97,76,13,27,49,78,34,12,64,1};  9         System.out.println("排序之前:"); 10         for (int i = 0; i < a.length; i++) { 11             System.out.print(a[i]+" "); 12         } 13         //希尔排序 14         int d = a.length; 15         while(true){ 16             d = d / 2; 17             for(int x=0;x<d;x++){ 18                 for(int i=x+d;i<a.length;i=i+d){ 19                     int temp = a[i]; 20                     int j; 21                     for(j=i-d;j>=0&&a[j]>temp;j=j-d){ 22                         a[j+d] = a[j]; 23                     } 24                     a[j+d] = temp; 25                 } 26             } 27             if(d == 1){ 28                 break; 29             } 30         } 31         System.out.println(); 32         System.out.println("排序之后:"); 33         for (int i = 0; i < a.length; i++) { 34             System.out.print(a[i]+" "); 35         } 36     } 37  38 } 复制代码            
回复 使用道具 举报
冒泡排序吧,之前和你一样,印象不深记不住,多加理解,肯定可以记住的!最实用也是程序员必须掌握的排序,大致是这样的,每个数字进行两两比较,然后交换他们的位置,如果是降序的话就将大的那个数字放到前面
for (int i=0; i<strlen(str1); i++) {
        for (int j=0; j<strlen(str1)-1; j++) {//这里减去1是因为,避免自己和自己比较一次,比如有三个数a,b,c,把a拿出来和b,c比较,所以比较次数就要少一次
            if (str[j]<str[j+1]) {//这进行的是降序排序,就是如果当前这个数的下一个大于当前这个数,那么进去交换他们的位置
                int temp=str[j]; //这里定义一个临时变量用了存放当前这个数
                str[j]=str[j+1];//然后,将当前这个数后面较大的那个数赋值给当前这个数
                str[j+1]=temp;//最后,将当前这个数的值赋值给当前这个数的下一个数,这样他们的位置就交换了,那么当执行下一个数时,它又会去执行相同的操作,这样的话,最大的数就到前面了,降序排序,希望我个人的理解能够帮到你,如果有用的话请打分,谢谢!
            }
        }
    }纯手工打造!
回复 使用道具 举报
选择排序 冒泡排序  
回复 使用道具 举报
建议你看一下《算法导论》这本书。看前面的内容就可以了~~有各种排序方法原理还有其优点缺点。
回复 使用道具 举报
牛奋 来自手机 中级黑马 2015-5-28 23:19:07
14#
冒泡排序是相邻的两个元素进行比较,达到要求就交换位置,大小数据就会各自往两边靠。是排序就会用到嵌套循环,外循环控制有多少元素要比较,而内部循环控制比较的次数。代码就不提供了,自己思考对你好。
回复 使用道具 举报
需要我们亲自动手写代码的,一边不行多来几次就好,原理很简单,就是需要我们牢记
回复 使用道具 举报
学到不少
回复 使用道具 举报
{:2_36:}来学习一下,java视频基础班没有讲排序。
回复 使用道具 举报
冒泡排序。例如n个数进行排序,利用两次for循环。如下:
回复 使用道具 举报
冒泡排序。例如n个数进行排序,利用两次for循环。如下
for(int i=n-1;i>0;i--)
        for(int j=0;j=<i;j++)
                {
                        if(a[j]<a[j+1])
                                {
                                        temp = a[j];
                                        a[j] = a[j+1];
                                        a[j] = temp;
                                }
                }
回复 使用道具 举报
选择  冒泡 学会就够了 反正没多少代码记住就行了class ArrayTest2         public static void selectSort (int [] arr)         {                 for (int x=0; x<arr.lengt-1; x++)                 {                         for(int y=x+1;y<arr.lengt; y++)                         {                                 if(arr[x]>arr[y])                         }                 }         } public static void main (String[] args) {         int arr = {5,3,1,6,8,9,6,2,}         selectSort(arr); } public static void printArray(int[] arr) {         System.out.print("[");         for(int x=0;x<arr.length;x++)         {         if(x!=arr.length-1)                 System.out.print(arr[x]+",");         else                 System.out.println(arr[x]+"]");                 }         } }
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马