美文网首页
数据结构&算法(一)

数据结构&算法(一)

作者: 大数据阶梯之路 | 来源:发表于2019-04-26 18:11 被阅读0次

一、Java实现快速排序算法

package test;

public class FastSort {
    public static void main(String[] args) {
        System.out.println("*********快速排序***********");
        int[] a = new int[8];
        System.out.println("随机产生测试用的8个数据:");
        //产生数据
        for(int i=0;i<8;i++) {
            int r = (int)(Math.random()*100)+1;  //产生1-100的随机数
            a[i] = r;   //放在一个数组
            if(i==7) {
                System.out.print(a[i]);
            }else {
                System.out.print(a[i]+",");
            }       
        }
        System.out.println();
        int start = 0;
        int end = a.length-1;
        sort(a,start,end);
        System.out.println("快速排序好的数据:");
        //输出排序结果
        for(int i=0;i<a.length;i++) {
            if(i==7) {
                System.out.print(a[i]);
            }else {
                System.out.print(a[i]+",");
            }
        }
        
    }
    //快速排序
    public static void sort(int[] a,int left,int right) {
        int start = left;
        int end = right;
        int center = a[left];
        //逐轮排序,一轮下来就确定了中心枢纽,左边都比中心枢纽值小,右边都比中心枢纽值大
        while(start<end) {
            //从后往前排
            while(start<end && a[end]>=center) {
                end--;
            }
            if(a[end]<=center) {
                int temp = a[end];
                a[end] = a[start];
                a[start] = temp;
            }
            //从前往后排
            while(start<end && a[start]<=center) {
                start++;
            }
            if(a[start]>=center) {
                int temp = a[start];
                a[start] = a[end];
                a[end] = temp;
            }
        }
        //递归
        if(start>left)//左边序列
            sort(a,left,start-1);
        if(end<right)//右边序列
            sort(a,end+1,right);
    }
}
图片.png

二、Java实现折半插入排序算法

package test;

public class BinaryInsertSort {
    public static void main(String[] args) {
        System.out.println("*********折半插入排序***********");
        int[] a = new int[8];
        System.out.println("随机产生测试用的8个数据:");
        //产生数据
        for(int i=0;i<8;i++) {
            int r = (int)(Math.random()*100+1);
            a[i] = r;
            if(i==7) {
                System.out.print(a[i]);
            }else {
                System.out.print(a[i]+",");
            }
        }
        System.out.println();
        sort(a);
        System.out.println("输出排好序的数据");
        for(int j=0;j<8;j++) {
            if(j==7) {
                System.out.print(a[j]);
            }else {
                System.out.print(a[j]+",");
            }
        }
    }
    //折半插入排序
    public static void sort(int[] a) {
        int n = a.length;
        int i,j;
        for(i=1;i<n;i++) {
            int low = 0;
            int high = i-1;
            int temp = a[i];
            //使用二分法寻找temp插入有序序列的正确位置
            while(low<=high) {
                int center = (low+high)/2;
                //移动low,high的位置
                if(a[center]<temp) {
                    low = center+1;
                }else {
                    high = center-1;
                }
            }
            //把temp的正确位置后面元素后移一位
            for(j=i-1;j>=low;j--) {
                a[j+1] = a[j];
            }
            //插入temp
            a[low] = temp;
        }
    }
}
图片.png

三、Java实现冒泡排序算法

package test;

public class BubbleSort {
    public static void main(String[] args) {
        System.out.println("*********冒泡排序***********");
        int[] a = new int[8];
        System.out.println("随机产生测试用的8个数据:");
        //产生数据
        for(int i=0;i<8;i++) {
            int r = (int)(Math.random()*100)+1;  //产生1-100的随机数
            a[i] = r;   //放在一个数组
            if(i==7) {
                System.out.print(a[i]);
            }else {
                System.out.print(a[i]+",");
            }       
        }
        System.out.println();
        sort(a);
        System.out.println("快速排序好的数据:");
        //输出排序结果
        for(int i=0;i<a.length;i++) {
            if(i==7) {
                System.out.print(a[i]);
            }else {
                System.out.print(a[i]+",");
            }
        }
    }
    //冒泡排序
    public static void sort(int[] a) {
        //外层循环控制排序趟数
        for(int i=0;i<a.length-1;i++) {
            //内层循环控制每一趟比较多少次
            for(int j=0;j<a.length-1-i;j++) {
                //如果后一个比前一个元素大,则往后冒
                if(a[j]>a[j+1]) {
                    //两两交换
                    int temp = a[j+1];
                    a[j+1] = a[j];
                    a[j] = temp;
                }
            }
        }
    }
}
图片.png

相关文章

网友评论

      本文标题:数据结构&算法(一)

      本文链接:https://www.haomeiwen.com/subject/uzpqnqtx.html