热门搜索 :
考研考公
您的当前位置:首页正文

选择、插入、冒泡、快速排序

来源:东饰资讯网

1. 100以内素数的个数:

在大于1的整数中,只能被1和这个数本身整除的数,如2、3、5、7、11。也叫质数

    public static void getPrime(){
        int sum = 0;
        _L:for (int i = 2;i<=100;i++) {
            for(int j = 2;j<i;j++){
                if(i%j==0){
                    continue _L;
                }
            }
            sum++;
        }
        System.out.println("100以内素数的个数是:"+sum);
    }

2.斐波那契数

1、1、2、3、5、8、13、21、

    public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {
            System.out.println(fibonacci(i));;
        }
    }
    
    public static int fibonacci(int num){
        if(num == 1 || num == 2){
            return 1;
        }else{
            return fibonacci(num-2)+fibonacci(num-1);
        }
    }

3.两数交换

    private static void swap(int[] a,int i,int j){
        if(i == j){
            return;
        }
        //a[i] = 0b10, a[j] = 0b11;
        a[i] ^= a[j];
        //a[i] = 0b01, a[j] = 0b11;
        a[j] ^= a[i];
        //a[i] = 0b01, a[j] = 0b10;
        a[i] ^= a[j];
        //a[i] = 0b11, a[j] = 0b10; 
    }

4.选择排序

前一个数与它后面的数依次进行比较,如果比它小,就进行交换。

    private static void selectorSort(){
        for (int i = 0; i < a.length; i++) {
            int min = i;//减少交次数
            for (int j = i+1; j < a.length; j++) {
                if(a[min] > a[j]){
                    min = j;
                }
            }
            if(min != i){
                swap(a,i,min);
            }
        }
    }

5.插入排序

指针所指的前面的数是已经排序好的,需要将i 与i+1 所指的数进行比较。

public void insertSort(int[] a){
        int length=a.length;//数组长度,将这个提取出来是为了提高速度。
        int insertNum;//要插入的数
        for(int i=1;i<length;i++){//插入的次数
            insertNum=a[i];//要插入的数
            int j=i-1;//已经排序好的序列元素个数
            while(j>=0&&a[j]>insertNum){//序列从后到前循环,将大于insertNum的数向后移动一格
                a[j+1]=a[j];//元素移动一格
                j--;
            }
            a[j+1]=insertNum;//将需要插入的数放在要插入的位置。
        }
    }

6.冒泡排序

从后往前进行排序,相邻的两数之间进行比较,若[j]>[j+1]就行交换。

    private static void bubbleSort(){
        for (int i = a.length - 1; i > 0; i--) {
            for(int j = 0;j<i;j++){
                if(a[j]>a[j+1]){
                    swap(a,j,j+1);
                }
            }
        }
    }

public void bubbleSort(int[] a){
        int length=a.length;
        int temp;
        for(int i=0;i<a.length;i++){
            for(int j=0;j<a.length-i-1;j++){
                if(a[j]>a[j+1]){
                    temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                }
            }
        }
    }

7.快速排序

指针所指的数左边是小于该数的,右边是大于该数的。

    private static int a[] = new int[]{10,85,32,14,1,23,58,8};
    private static Random random;
    public static void main(String[] args) {
        random = new Random();
        qsort(0,a.length - 1);
    }
    
    private static void qsort(int start,int end){
        if(start>= end){
            return;
        }
        
        int index = random.nextInt(end - start +1) + start;
        swap(a,index,end);
        index = start;
        for(int i = start;i<end;i++){
            if(a[i]<a[end]){
                swap(a,index,i);
                index++;
            }
        }
        swap(a,index,end);
        qsort(start, index);
        qsort(index+1,end);
    }
Top