zoukankan      html  css  js  c++  java
  • Java 常用排序算法实现快速排序、插入排序、选择、冒泡

    public class ArrayOperation {

        
    //二分查找算法
        public static int branchSearch(int[] array, int searchNum) {
            
    if (array == null)
                
    throw new NullPointerException("Null Referrence");
            
    if (array.length == 0)
                
    throw new IllegalArgumentException("Array Length is Zero");
            
    int low = 0, high = array.length;
            
    int middle = (high + low) / 2;
            
    int index = -1;
            
    if (searchNum < array[0|| searchNum > array[array.length - 1])
                
    return index;
            
    while (middle >= 0) {
                
    if (array[middle] == searchNum) {
                    index 
    = middle;
                    
    break;
                }
                
    if (searchNum > array[middle]) {
                    low 
    = middle;
                } 
    else {
                    high 
    = middle;
                }
                middle 
    = (low + high) / 2;
            }

            
    return index;

        }

        
    // 快速排序
        
        
    public static void quickSort(int a[], int left, int right) {
            
    int i, j, temp;
            i 
    = left;
            j 
    = right;
            
    if (left > right)
                
    return;
            temp 
    = a[left];
            
    while (i != j)/* 找到最终位置 */
            {
                
    while (a[j] >= temp && j > i)
                    j
    --;
                
    if (j > i)
                    a[i
    ++= a[j];
                
    while (a[i] <= temp && j > i)
                    i
    ++;
                
    if (j > i)
                    a[j
    --= a[i];

            }
            a[i] 
    = temp;
            quickSort(a, left, i 
    - 1);/* 递归左边 */
            quickSort(a, i 
    + 1, right);/* 递归右边 */
        }

        
    // 插入排序
        
    // 特点:用temp保存将要排序的临时值,然后把大的值插入到这个位置。
        public static int[] insert_Sort(int[] array) {
            
    int i, j, temp;
            
    for (i = 1; i < array.length; i++) {
                
    for (j = i, temp = array[i]; j > 0 && temp < array[j - 1]; j--)
                    array[j] 
    = array[j - 1];
                array[j] 
    = temp;
            }
            
    return array;
        }

        
    // 冒泡排序
        
    // 特点:从第一个元素开始,如果需要交换,就一直冒泡到底,如果不需要交换,就从下一个元素开始比较
        public void bubble_Sort(int[] array, int size) {
            
    int i, j, temp;
            
    for (i = size - 1; i > 1; i--)
                
    for (j = 0; j < i; j++)
                    
    if (array[j] > array[j + 1]) {
                        temp 
    = array[j + 1];
                        array[j 
    + 1= array[j];
                        array[j] 
    = temp;
                    }
        }

        
    // 交换排序
        
    // 特点:始终是第一个元素与其他元素一一比较,交互后,继续用第一个元素与后面元素一一比较,重复下去。
        public int[] change_Sort(int[] array, int size) {
            
    int i, j, temp;
            
    for (i = 0; i < size; i++)
                
    for (j = i + 1; j < size; j++)
                    
    if (array[i] > array[j]) {
                        temp 
    = array[j];
                        array[j] 
    = array[i];
                        array[i] 
    = temp;
                    }
            
    return array;
        }

        
    // 选择排序一(便于区分:咱就叫:选择最小值排序法)
        
    // 特点:分有序区(第一个元素)和无序区(除第一元素外的元素),从无序区找出最小的元素移动到有序区
        public void SelectSort(int[] array) {
            
    int i, j, k;// 分别为有序区,无序区,无序区最小元素指针
            for (i = 0; i < array.length; i++) {
                k 
    = i;
                
    for (j = i + 1; j < array.length; j++) {
                    
    if (array[j] < array[k])
                        k 
    = j;
                }
                
    if (k != i)// 若发现最小元素,则移动到有序区
                {
                    
    int temp = array[k];
                    array[k] 
    = array[i];
                    array[i] 
    = array[temp];
                }
            }
        }

        
    // 选择排序二
        public int[] select_Sort(int[] array, int size) {
            
    int i, j, temp, pos;
            
    for (i = 0; i < size; i++) {
                
    for (j = i + 1, temp = array[i], pos = i; j < size; j++)
                    
    if (temp > array[j]) {
                        temp 
    = array[j];
                        pos 
    = j;
                    }
                array[pos] 
    = array[i];
                array[i] 
    = temp;
            }

            
    return array;
        }

        
    //希尔排序
        
    //    属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序
        
    //  排序过程:先取一个正整数d1<n,把所有序号相隔d1的数组元素放一组,组内进行直接插入排序;
        
    //  然后取d2<d1,重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止 
        public static void ShellSort(int[] array) {
            
    int length = array.length;
            
    for (int h = length / 2; h > 0; h = h / 2) {
                
    // here is insert sort
                for (int i = h; i < length; i++) {
                    
    int temp = array[i];
                    
    if (temp < array[i - h]) {
                        
    for (int j = 0; j < i; j += h) {
                            
    if (temp < array[j]) {
                                temp 
    = array[j];
                                array[j] 
    = array[i];
                                array[i] 
    = temp;
                            }
                        }
                    }
                }
            }
        }
    }


  • 相关阅读:
    [找程序员代写推荐]jbpm4.4项目测试源码下载,效果图
    [原]强大的JQuery
    [找程序员代写推荐]SSH+jquery+springScurity权限管理+jasperreport报表+webService调用天气预报+完整分页 整合小型OA项目源码下载
    [找程序员代写推荐]Exception in thread &quot;http-apr-8080-exec-6&quot; java.lang.OutOfMemoryError: PermGen space 解决!
    [原]12-13年学习总结——路上的风景很美
    [找程序员代写推荐]jquery 弹出登陆框,简单易懂!修改密码效果代码
    [找程序员代写推荐]php和apache2的配置
    [找程序员代写推荐]myBatis 基础测试 表关联关系配置 集合 测试
    [找程序员代写推荐]myBatis 基础测试 增 删 改 查 用过hibrenate 之后,感觉很好理解
    JVM运行时数据区域
  • 原文地址:https://www.cnblogs.com/hubcarl/p/2007823.html
Copyright © 2011-2022 走看看