首页 > 编程知识 正文

java排序算法代码,java基础面试题及答案

时间:2023-05-04 19:05:10 阅读:55576 作者:3860

目录

泡沫排序

选择排序

插入排序

快速排序

合并排序

基数排序

气泡排序publicstaticvoidsort(int[]arr ) for ) intI=0; iarr.length; I ) for(intj=0; jarr.length-1; j () if ) arr[j]arr[j1] ) {int temp=arr[j]; arr[j]=arr[j 1]; arr[j 1]=temp; } } system.out.println (arrays.tostring (arr ); }选择排序顺序的说明。 首先,在未排序的序列中找到最小(最大)元素,并将其存储在排序顺序的开头。 接下来,从剩馀的未排序元素中继续查找最小(最大)元素,并将其放置在已排序序列的末尾。 这样,等待所有元素都被排序。

publicstaticvoidsort(int[]arr ) for ) intj=0; jarr.length-1; j ()/j用于计数倒圆角数,输入最小(最大)值的位置int min=arr[j]; int index=j; //index记录最小(最大)值的位置,后面的替换位置for ) intI=j1; iarr.length; I ) )/I最小值(从最小(最大)值的下一位开始新的最小(最大) )值if ) { min=arr[i] ) { min=arr[i]; 索引=I; (//如果找到最小值,则首先将最小值位置的值设置为==j的位置的值,其中j的位置是每个回合的开头arr[index]=arr[j];//使j位置的值等于最小值min arr[j]=min; } system.out.println (arrays.tostring (arr ); }插入排序

publicstaticvoidcharusort (intarr [ ] ) {for ) intI=1; iarr.length; I ) for(intj=I; j0; j--}{//j-1小于j时更换,否则无需手动退出if(arr[j-1]arr[j] ) { int temp=arr[j]; arr[j]=arr[j-1]; arr[j-1]=temp; }else{ break; } } system.out.println (arrays.tostring (arr ); import java.util.Arrays; public class quick sort { publicstaticvoidmain (字符串[ ] args ) int [ ] arr=new int [ ] { 6,1,2,7,9,3,4,5,110 } 系统. out.println (arrays.tostring (arr ) ); } publicstaticvoidquicksort (int [ ] arr,int left,int right ) if (left=right ) { return; //递归用} int base=ar

r[left]; int i = left; int j = right; while (i != j){ while (arr[j] >=base && i<j){ j--;//右指针大,就让右指针往左走 } while (arr[i] <= base && i<j){ i++;//左指针大,就让左指针往右走 } //如果左指针不大,右指针不小,就交换两个指针的位置 int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } arr[left] = arr[i]; arr[i] = base; quickSort(arr,left,i-1); quickSort(arr,i+1,right); }} 归并排序

public class play { public static void main(String[] args) { int[] arr = new int[]{1,7,8,5,2,4,}; splitSort(arr,0,arr.length-1); System.out.println(Arrays.toString(arr)); } public static void splitSort(int[] arr,int left,int right){ if (left == right){ return; } int mid = (left + right) /2; splitSort(arr,left,mid); splitSort(arr,mid+1,right); merge(arr,left,right,mid); } public static void merge(int[] arr,int left, int right,int mid){ int[] temp = new int[right - left +1]; int s1 = left; int s2 = mid+1; int i = 0; while (s1<=mid && s2 <=right){ if(arr[s1] <= arr[s2]){ temp[i] = arr[s1]; i++; s1++; }else { temp[i] = arr[s2]; i++; s2++; } } while (s2 <=right){ temp[i] = arr[s2]; i++; s2++; } while (s1 <= mid){ temp[i] = arr[s1]; i++; s1++; } for (int j =0;j<temp.length;j++){ arr[j + left] = temp[j]; } }

基数排序 package com.qcby;import java.util.Arrays;public class Dog { public static void main(String[] args) { int[] arr = new int[]{5,6,3,2,7,1,8}; sort(arr); System.out.println(Arrays.toString(arr)); } public static void sort(int[] arr){ //找到数组当中最大的这个数是多少,关系着我们经历多少轮排序 int max = arr[0]; for (int i =0;i<arr.length;i++){ if (arr[i] >max){ max = arr[i]; } } int maxLength = (max + "").length(); // 桶 int[][] bucket = new int[10][arr.length]; // 每一个桶当中有多少数据 int[] buckElementCounts = new int[10]; int n = 1; //多少轮排序 for (int h = 0;h<maxLength;h++){ for (int i = 0;i<arr.length;i++){ int element = arr[i] / n % 10; bucket[element][ buckElementCounts[element]] = arr[i]; buckElementCounts[element]++; } int i=0; for (int k=0;k<buckElementCounts.length;k++){ //将桶内的数据放回原有数组当中 if(buckElementCounts[k] !=0){ for (int l = 0;l<buckElementCounts[k];l++){ arr[i++] = bucket[k][l]; } } buckElementCounts[k] = 0; } n = n *10; } }}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。