招聘网站上还要另外做简历吗,无锡网络营销推广公司,建邺做网站价格,提供电子商务网站建设外包服务的企业文章目录 一、冒泡排序(重点)思路代码 二、快排(面试重点)思路代码 三、堆排序(面试重点)思路代码 四、选择排序思路代码 一、冒泡排序(重点)
思路
前后两两数据进行比较#xff0c;小的数据往前走#xff0c;大的数据往后走#xff0c;每一轮结束之后#xff0c;最大的数… 文章目录 一、冒泡排序(重点)思路代码 二、快排(面试重点)思路代码 三、堆排序(面试重点)思路代码 四、选择排序思路代码 一、冒泡排序(重点)
思路
前后两两数据进行比较小的数据往前走大的数据往后走每一轮结束之后最大的数据到达正确位置
代码
public static void main(String[] args) {int[] arr{1,5,3,6,22,0,2,5};sort(arr);System.out.println(Arrays.toString(arr));}public static void sort(int[] arr){for(int j 0;jarr.length;j){for(int i 0;iarr.length-j-1;i){if(arr[i]arr[i1]){int temp arr[i];arr[i] arr[i1];arr[i1] temp;}}}}二、快排(面试重点)
思路
1.定义待排序数组当中的第一个作为基准数 2.游标 j 从后往前查找比基准数小的查找到第一个比基准数小的数停下 3.定义游标i 从前往后查找第一个比基准数大的值停下 4.i 和 j 进行交换 5.重复234直到i 和 j 相遇 6.基准数和相遇位置进行交换基准数到达正确位置 7.以基准数为起始点分成左右两部分重复上述所有 直到数据都被拆分开为止
代码
public static void quicksort(int[] arr,int left,int right){if(leftright){return ;}int base arr[left];int i left;int j right;while(i !j ){//j从后往前走找比基数小的值while(arr[j] base ij){j--;}//i从前往后走找比基数小的值while (arr[i] base ij){i;}int temp arr[i];arr[i] arr[j];arr[j] temp;}//当ij时arr[left] arr[i];arr[i] base;quicksort(arr,left,i-1);quicksort(arr,i1,right);}三、堆排序(面试重点)
思路
1.利用完全二叉树构建大顶堆 2.堆顶元素和堆底元素进行互换除堆底元素之外剩余元素继续构建大顶堆 3.重复2
arr[i]的 左孩子arr[2i1] arr[i]的 右孩子arr[2i2] arr[i]的 父亲arr[(i-1)/2]
arr[i]arr[2i1] arr[i]arr[2i2] 完全二叉树数据从上到下 从左到右 大顶堆父节点的值大于或等于其左右孩子的值
构建大顶堆 一、从后往前检测节点是否符合大顶堆的要求如果符合向前检查不符合对当前节点进行调整 1.parent指向当前节点 2.定义parent的左孩子 child(有孩子一定有左孩子) 3.判断parent的右孩子 如果有右孩子左右孩子进行比较 child指向左右孩子的最大值 4.父子节点进行比较如果 父节点值大符合大顶堆继续向前检查 5.如果子节点的值大父子节点进行交换parent指向childchild指向其左右孩子的最大值继续将父子节点进行比较 6.直到父节点值大或者child为空
二、维护堆顶 parent指向 堆顶child指向其左右孩子的最大值 父子节点进行比较如果父节点值大大顶堆构建完成 如果父节点值小父子节点交换
代码 public static void main(String[] args) {int[] arr{1,5,3,6,22,0,2,5};for(int i arr.length-1;i0;i--){adjust(arr,i, arr.length);}for (int i arr.length-1;i0;i--){int temp arr[i];arr[i] arr[0];arr[0] temp;adjust(arr,0,i);}System.out.println(Arrays.toString(arr));}/*** 堆排*/public static void adjust(int[] arr,int parent,int length){int child 2*parent1;while(childlength){int rchild child 1;if(rchildlength arr[rchild]arr[child]){child;}if(arr[parent] arr[child]){int temp arr[parent];arr[parent] arr[child];arr[child] temp;parent child;child 2*child 1;}else {break;}}}四、选择排序
思路
默认待排序数组当中的第一个数为最小值 找待排序数组当中真正的最小值 找到真正的最小值和待排序数组第一个数据进行交换 真正的最小值到达正确位置
代码 /*** 选择排序*/public static void chooseSort(int[] arr){for(int j 0;jarr.length;j){int min arr[j];int minIndex j;for(int i j1;iarr.length;i){if(minarr[i]){min arr[i];minIndex i;}}//min的真正最小值arr[minIndex] arr[j];arr[j] min;}}