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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Barnard 初级黑马   /  2015-11-10 02:01  /  1107 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Java实现几种常见排序方法

日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、桶排序、鸽巢排序、归并排序等。

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
            
代码
/**  
* 冒泡法排序<br/>  

* <li>比较相邻的元素。如果第一个比第二个大,就交换他们两个。</li>  
* <li>对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。</li>  
* <li>针对所有的元素重复以上的步骤,除了最后一个。</li>  
* <li>持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。</li>  

*   
* @param numbers  
*            需要排序的整型数组  
*/  
public static void bubbleSort(int[] numbers) {   
    int temp; // 记录临时中间值   
    int size = numbers.length; // 数组大小   
    for (int i = 0; i < size - 1; i++) {   
        for (int j = i + 1; j < size; j++) {   
            if (numbers[i] < numbers[j]) { // 交换两数的位置   
                temp = numbers[i];   
                numbers[i] = numbers[j];   
                numbers[j] = temp;   
            }   
        }   
    }   
}  

快速排序使用分治法策略来把一个序列分为两个子序列。
代码
/**  
* 快速排序<br/>  
* <ul>  
* <li>从数列中挑出一个元素,称为“基准”</li>  
* <li>重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分割之后,  
* 该基准是它的最后位置。这个称为分割(partition)操作。</li>  
* <li>递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。</li>  
* </ul>  
*   
* @param numbers  
* @param start  
* @param end  
*/  
public static void quickSort(int[] numbers, int start, int end) {   
    if (start < end) {   
        int base = numbers[start]; // 选定的基准值(第一个数值作为基准值)   
        int temp; // 记录临时中间值   
        int i = start, j = end;   
        do {   
            while ((numbers[i] < base) && (i < end))   
                i++;   
            while ((numbers[j] > base) && (j > start))   
                j--;   
            if (i <= j) {   
                temp = numbers[i];   
                numbers[i] = numbers[j];   
                numbers[j] = temp;   
                i++;   
                j--;   
            }   
        } while (i <= j);   
        if (start < j)   
            quickSort(numbers, start, j);   
        if (end > i)   
            quickSort(numbers, i, end);   
    }   
}  


6 个回复

正序浏览
不错哦  复习了下
回复 使用道具 举报
恩恩 真的很好。
回复 使用道具 举报
沒想到有這麼多種排序,感謝分享
回复 使用道具 举报
恩恩 学习了
回复 使用道具 举报
挺好的 刚好用
回复 使用道具 举报
之前学java的时候看过,哎哟不错哦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马