java常见的几种排序

package sort.bubble;   
  
import java.util.Random;   
/**  
 * 冒泡排序
 * 
 * 
 * 
 * 依次比较相邻的两个数,将小数放在前面,大数放在后面  
 * 冒泡排序,具有稳定性  
 * 时间复杂度为O(n^2)  
 * 不及堆排序,快速排序O(nlogn,底数为2)  
 * @author liangge  
 *  
 */  
public class Main {   
    public static void main(String[] args) {   
        Random ran = new Random();   
        int[] sort = new int[10];   
        for(int i = 0 ; i < 10 ; i++){   
            sort[i] = ran.nextInt(50);   
        }   
        System.out.print(“排序前的数组为”);   
        for(int i : sort){   
            System.out.print(i+” “);   
        }   
        buddleSort(sort);   
        System.out.println();   
        System.out.print(“排序后的数组为”);   
        for(int i : sort){   
            System.out.print(i+” “);   
        }   
    }   
       
    /**  
     * 冒泡排序  
     * @param sort  
     */  
    private static void buddleSort(int[] sort){   
        for(int i=1;i<sort.length;i++){   
            for(int j=0;j<sort.length-i;j++){   
                if(sort[j]>sort[j+1]){   
                    int temp = sort[j+1];   
                    sort[j+1] = sort[j];   
                    sort[j] = temp;   
                }   
            }   
        }   
    }   
}  


二、选择排序

package sort.select;   
  
import java.util.Random;   
  
/**  
 * 选择排序  
 * 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,  
 * 顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。   
 * 选择排序是不稳定的排序方法。  
 * @author liangge  
 *   
 */  
public class Main {   
    public static void main(String[] args) {   
        Random ran = new Random();   
        int[] sort = new int[10];   
        for (int i = 0; i < 10; i++) {   
            sort[i] = ran.nextInt(50);   
        }   
        System.out.print(“排序前的数组为”);   
        for (int i : sort) {   
            System.out.print(i + ” “);   
        }   
        selectSort(sort);   
        System.out.println();   
        System.out.print(“排序后的数组为”);   
        for (int i : sort) {   
            System.out.print(i + ” “);   
        }   
    }   
  
    /**  
     * 选择排序  
     * @param sort  
     */  
    private static void selectSort(int[] sort){   
        for(int i =0;i<sort.length-1;i++){   
            for(int j = i+1;j<sort.length;j++){   
                if(sort[j]<sort[i]){   
                    int temp = sort[j];   
                    sort[j] = sort[i];   
                    sort[i] = temp;   
                }   
            }   
        }   
    }   
}  
三、快速排序

package sort.quick;   
  
/**  
 * 快速排序 通过一趟排序将要排序的数据分割成独立的两部分, 其中一部分的所有数据都比另外一部分的所有数据都要小,  
 * 然后再按此方法对这两部分数据分别进行快速排序, 整个排序过程可以递归进行,以此达到整个数据变成有序序列。  
 * @author liangge  
 *   
 */  
public class Main {   
    public static void main(String[] args) {   
        int[] sort = { 54, 31, 89, 33, 66, 12, 68, 20 };   
        System.out.print(“排序前的数组为:”);   
        for (int data : sort) {   
            System.out.print(data + ” “);   
        }   
        System.out.println();   
        quickSort(sort, 0, sort.length – 1);   
        System.out.print(“排序后的数组为:”);   
        for (int data : sort) {   
            System.out.print(data + ” “);   
        }   
    }   
  
    /**  
     * 快速排序  
     * @param sort 要排序的数组  
     * @param start 排序的开始座标  
     * @param end 排序的结束座标  
     */  
    public static void quickSort(int[] sort, int start, int end) {   
        // 设置关键数据key为要排序数组的第一个元素,   
        // 即第一趟排序后,key右边的数全部比key大,key左边的数全部比key小   
        int key = sort[start];   
        // 设置数组左边的索引,往右移动判断比key大的数   
        int i = start;   
        // 设置数组右边的索引,往左移动判断比key小的数   
        int j = end;   
        // 如果左边索引比右边索引小,则还有数据没有排序   
        while (i < j) {   
            while (sort[j] > key && j > start) {   
                j–;   
            }   
            while (sort[i] < key && i < end) {   
                i++;   
            }   
            if (i < j) {   
                int temp = sort[i];   
                sort[i] = sort[j];   
                sort[j] = temp;   
            }   
        }   
        // 如果左边索引比右边索引要大,说明第一次排序完成,将sort[j]与key对换,   
        // 即保持了key左边的数比key小,key右边的数比key大   
        if (i > j) {   
            int temp = sort[j];   
            sort[j] = sort[start];   
            sort[start] = temp;   
        }   
        //递归调用   
        if (j > start && j < end) {   
            quickSort(sort, start, j – 1);   
            quickSort(sort, j + 1, end);   
        }   
    }   
}

四、插入排序

package sort.insert;   
  
/**  
 * 直接插入排序  
 * 将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据  
 * 算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。  
 */  
import java.util.Random;   
  
public class DirectMain {   
    public static void main(String[] args) {   
        Random ran = new Random();   
        int[] sort = new int[10];   
        for (int i = 0; i < 10; i++) {   
            sort[i] = ran.nextInt(50);   
        }   
        System.out.print(“排序前的数组为”);   
        for (int i : sort) {   
            System.out.print(i + ” “);   
        }   
        directInsertSort(sort);   
        System.out.println();   
        System.out.print(“排序后的数组为”);   
        for (int i : sort) {   
            System.out.print(i + ” “);   
        }   
    }   
  
    /**  
     * 直接插入排序  
     *   
     * @param sort  
     */  
    private static void directInsertSort(int[] sort) {   
        for (int i = 1; i < sort.length; i++) {   
            int index = i – 1;   
            int temp = sort[i];   
            while (index >= 0 && sort[index] > temp) {   
                sort[index + 1] = sort[index];   
                index–;   
            }   
            sort[index + 1] = temp;   
  
        }   
    }   
}  

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值