Java常用算法练习,(含八大排序算法)

1.利用递归算法求解数组各元素的和;

//实现代码   
public static int sum(int[] arr,int n)
    {
        if (n==0)
        {
            return 0;
        }
        else{
            int aa=sum(arr,n-1);
            return aa+arr[n-1];

        }

    }
//测试代码
 public static void main(String[] args) {

        int []a={1,1,1,2,3};
        int aa=sum(a,5);
        System.out.println(aa);
     
    }
//运行结果:8

2.利用快慢指针实现数组元素去重

//实现代码
public static void quchong(int [ ]arr ,int val) {
    int fast = 0;
    int slow = 0;
    while (fast < arr.length) {
        if (arr[fast] != val)
        {     slow++;
        arr[slow] = arr[fast];
    }fast++;

}
    System.out.println(Arrays.toString(arr));

}
//测试代码
    public static void main(String[] args) {

        int[] errr={1,2,5,1,1,1,2,5,2};
quchong(errr,1);

}

3.实现数组扩容并插入新元素

//实现代码
  public static void insert(int[] arr,int val,int index,int temp)
        {
            if (temp == arr.length) {
                int[] brr = new int[arr.length * 2];
                for (int i = 0; i < arr.length; i++) {
                    brr[i] = arr[i];
                }
                arr = brr;
            }
            System.out.println(Arrays.toString(arr));
            for (int i = temp; i > index; i--) {
                arr[i] = arr[i - 1];
            }
            arr[index] = val;
            System.out.println(Arrays.toString(arr));
        }
    }
//测试代码
 public static void main(String[] args) {
  insert(a,15555,2,temp);
}

八大排序基本算法:

1.冒泡排序

public class BubbleSort {
    public static void main(String[] args) {
        int[] arr={1,5,6,2,3,9,8,13};
        Bubble_Sort(arr);

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

            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

2.选择排序

public class SelectionSort {
    public static void main(String[] args) {
        int[] arr={1,5,6,2,3,9,8,13};
        Selection_Sort(arr);
    }
    public static void Selection_Sort(int[] arr)
    {

        for (int i = 0; i < arr.length; i++) {
            int min=arr[i];int mindex =i;

            for (int j = i+1; j < arr.length; j++) {
                if (arr[j]<min)
                {
                  min=arr[j];
                  mindex=j;
                }
            }

               if (mindex!=i)
               {
                   int temp=arr[mindex];
                   arr[mindex]=arr[i];
                   arr[i]=min;

               }

        }
        System.out.println(Arrays.toString(arr));

    }

}

3.插入排序

public class InsertSort {
    public static void main(String[] args){
        int[] arr={1,5,6,2,3,19,12,18,13};
        Insert_Sort(arr);
//运行结果:[1,2,3,5,6,12,13,18,19]

    }
    public static void Insert_Sort(int[] arr)
    {
        for (int i = 1; i < arr.length;i++){
            while (arr[i]<arr[i-1]){
                int temp=arr[i];
                arr[i]=arr[i-1];
                arr[i-1]=temp;
                if(i>1){
                    i--;
                }
            }

        }
        System.out.println(Arrays.toString(arr));
    }

}

4.归并排序

package com.company;

import java.util.Arrays;

public class MergeSort {
    public static void main(String[] args) {
        int[] arr={1,5,6,2,3,19,12,18,13,11};
        Divide(arr,0, arr.length-1);
        Merge_Sort(arr,0,(arr.length-1+0)/2,arr.length-1);
    }
    public static void Divide(int[]arr,int start,int end)
    {
        int center=(start+end)/2;
        if (start<end){
            Divide(arr,start,center);
            Divide(arr,center+1,end);
            Merge_Sort(arr,start,center,end);}
    }
    public static void Merge_Sort(int []arr,int start,int center,int end)
    {
        int[] arr2=new int[end-start+1];
        int i=start;
        int j=center+1;
        int index=0;
        while(i<=center&&j<=end)
        {
            if (arr[i]>=arr[j])
            {
                arr2[index]=arr[j];
                j++;
            }else
            {
                arr2[index]=arr[i];
                i++;
            }
            index++;
        }
        while(i<=center)
        {
            arr2[index]=arr[i];
            i++;
            index++;
        }
        while(j<=end)
        {
            arr2[index]=arr[j];
            j++;
            index++;
        }
        for (int n = 0; n < arr2.length; n++) {
            arr[n+start]=arr2[n];
        }
        System.out.println(Arrays.toString(arr));
    }

}

5.基数排序

public class RadixSort {
    public static void main(String[] args) {
        int[] arr={1,5,6,2,3,19,12,18,13};
        Radix_Sort(arr);
//运行结果:[1, 2, 12, 3, 13, 5, 6, 18, 19]
//          [1, 2, 3, 5, 6, 12, 13, 18, 19]

    }
    public static void Radix_Sort(int[] arr)
    {//创建桶
        int[][] mrr=new int[10][arr.length];
        //创建桶计数器
        int[] bucketcount=new int[10];
        //排序个位
        for (int i = 0; i < arr.length; i++) {
            int m=arr[i]%10;//取个位数字
            int count=bucketcount[m];
            mrr[m][count]=arr[i];
            bucketcount[m]=count+1;

        }
//        for (int i = 0; i < bucketcount.length; i++) {
//            System.out.println(bucketcount[i]);
//        }
    int a=0;
        for (int j = 0; j < bucketcount.length; j++) {
            if (bucketcount[j]!=0)
            {
                for (int k = 0; k <bucketcount[j]; k++) {
                    arr[a]=mrr[j][k];
                    a++;
                }
            }
            bucketcount[j]=0;
        }
        System.out.println(Arrays.toString(arr));
        //排序十位
        for (int i = 0; i < arr.length; i++) {
            int mm=(arr[i]/10)%10;//取十位数字
            int count=bucketcount[mm];
            mrr[mm][count]=arr[i];
            bucketcount[mm]=count+1;

        }
//        for (int i = 0; i < bucketcount.length; i++) {
//            System.out.println(bucketcount[i]);
//        }
        int aa=0;
        for (int j = 0; j < bucketcount.length; j++) {
            if (bucketcount[j]!=0)
            {
                for (int k = 0; k <bucketcount[j]; k++) {
                    arr[aa]=mrr[j][k];
                    aa++;
                }
            }
            bucketcount[j]=0;
        }
        System.out.println(Arrays.toString(arr));
    }
}

6.希尔排序

public class ShellSort {
    public static void main(String[] args){
        int[] arr={1,5,6,2,3,19,12,18,13};
        Shell_Sort(arr);
//运行结果:[1,2,3,5,6,12,13,18,19]
    }
    public static void Shell_Sort(int []arr)
    {
        for (int i = arr.length/2; i >=1; i/=2){
            for (int j = i; j < arr.length ; j++) {
                for (int k = j-i; k >=0; k-=i) {
                   if (arr[k]>arr[k+i])
                   {
                       int temp=arr[k];
                       arr[k]=arr[k+i];
                       arr[k+i]=temp;
                   }               }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

7.快速排序(重要:***)

public class QuickSort {
    public static void main(String[] args) {
        int[] arr={1,5,6,2,3,19,12,18,13,11};
        Quick_Sort(arr,0, arr.length-1);
        System.out.println(Arrays.toString(arr));
    }
    public  static void  Quick_Sort(int[] arr,int low,int high)
    {
        if (arr == null || arr.length <= 0) {
            return;
        }
        if (low >= high) {
            return;
        }

        int left = low;
        int right = high;

        int key = arr[left];

        while (left < right) {
            while (left < right && arr[right] >= key){
                right--;
            }
            while (left < right && arr[left] <= key){
                left++;
            }
            if (left < right) {
                swap(arr, left, right);
            }
        }
        swap(arr, low, left);
        System.out.println("Sorting:" + Arrays.toString(arr));
        Quick_Sort(arr, low, left-1);
        Quick_Sort(arr, left + 1, high);
    }

    public static void swap(int arr[], int low, int high){
        int tmp = arr[low];
        arr[low] = arr[high];
        arr[high] = tmp;
    }



}

8.堆排序(重要:*****)

public class HeapSort {
    public static void main(String[] args) {
        int[] arr={1,5,6,2,3,19,12,18,13,11};
        Heap_Sort(arr);
        System.out.println(Arrays.toString(arr));
    }
    public static void Heap_Sort(int []arr){
        for(int i=arr.length/2-1;i>=0;i--){
            adjustHeap(arr,i,arr.length);
        }
        for(int j=arr.length-1;j>0;j--){
            swap(arr,0,j);
            adjustHeap(arr,0,j);
        }

    }

    public static void adjustHeap(int []arr,int i,int length){
        int temp = arr[i];
        for(int k=i*2+1;k<length;k=k*2+1){
            if(k+1<length && arr[k]<arr[k+1]){
                k++;
            }
            if(arr[k] >temp){
                arr[i] = arr[k];
                i = k;
            }else{
                break;
            }
        }
        arr[i] = temp;

    }
    public static void swap(int []arr,int a ,int b){
        int temp=arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心态特好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值