当前位置: 首页 > news >正文

自己 做 网站地推公司

自己 做 网站,地推公司,保定市做网站的公司,可以做引流网站的源码排序算法 冒泡排序 时间和空间复杂度 要点 每轮冒泡不断地比较比较相邻的两个元素,如果它们是逆序的,则需要交换它们的位置下一轮冒泡,可以调整未排序的右边界,减少不必要比较 代码 public static int[] test(int[] array) {// 外层循环控制遍历次数for (int i 0; i <…

排序算法

冒泡排序

时间和空间复杂度

要点

  • 每轮冒泡不断地比较比较相邻的两个元素,如果它们是逆序的,则需要交换它们的位置
  • 下一轮冒泡,可以调整未排序的右边界,减少不必要比较

代码

public static int[] test(int[] array) {// 外层循环控制遍历次数for (int i = 0; i < array.length; i++) {// 内层循环控制每轮比较和交换for (int j = 0; j < array.length - i - 1; j++) {// 比较相邻两元素大小if (array[j] > array[j + 1]) {// 交换元素位置int temp = array[j + 1];array[j + 1] = array[j];array[j] = temp;}}}// 返回排序后的数组return array;
}

测试结果

public static void main(String[] args) {int[] array = {3,1,2,4,7,9};int[] ary = test(array);System.out.println(Arrays.toString(ary));}

选择排序

时间和空间复杂度

要点

  • 每一轮选择,找出最大(最小)的元素,并把它交换到合适的位置

代码

public static int[] test(int[] array) {// 外循环遍历数组元素for (int i = 0; i < array.length; i++) {// 内循环从当前元素的下一个元素开始比较for (int j = i+1; j < array.length; j++) {// 如果前一个元素大于后一个元素,交换它们的位置if(array[i] > array[j]){int temp = array[j];array[j] = array[i];array[i] = temp;}}}// 返回排序后的数组return array;}

测试结果

public static void main(String[] args) {int[] array = {3,1,2,4,7,9};int[] ary = test(array);System.out.println(Arrays.toString(ary));}

堆排序

时间和空间复杂度

要点(如果这里看不懂的话,是需要去了解大顶堆这个数据结构的)

  • 建立大顶堆
  • 每次将堆顶元素最大值,交换到末尾,调整堆顶元素,让它重新符合大顶堆特性

代码

import java.util.Arrays;public class Heap {int[] array; // 存储堆元素的数组int size;    // 堆的大小public Heap(int capacity) {this.array = new int[capacity];}public Heap(int[] array){this.array = array;this.size = array.length;heapify(); // 调用堆化方法,构建堆}/*** 建立堆*/private void heapify() {// 建立堆的过程实际上是找到最后一个非叶子节点for (int i = size/2-1; i >=0 ; i--) {// 接下来的循环中,i 是当前非叶子节点的索引down(i); // 对当前非叶子节点进行下潜操作,保证满足堆的性质}}// 下潜操作private void down(int i) {int left = i * 2 + 1; // 左子节点索引int right = left + 1; // 右子节点索引int max = i;          // 初始化最大值索引为当前节点// 判断左子节点是否存在且大于当前节点if (left < size && array[left] > array[max]) {max = left;}// 判断右子节点是否存在且大于当前节点if (right < size && array[right] > array[max]) {max = right;}if (max != i) {// 交换当前节点与最大值节点swap(max, i);// 递归调用下潜操作,保证交换后的子树仍然满足堆的性质down(max);}}// 交换数组中两个位置的元素private void swap(int a, int b) {int temp = array[a];array[a] = array[b];array[b] = temp;}
}public static void main(String[] args) {int[] array = {1,2,3,4,5,6,7};Heap heap = new Heap(array);// 堆排序while (heap.size > 1) {// 将堆顶元素与堆尾元素交换heap.swap(0, heap.size - 1);// 堆大小减一heap.size--;// 对交换后的堆顶元素进行下潜操作,保证仍然满足堆的性质heap.down(0);}System.out.println(Arrays.toString(heap.array));
}

测试结果

插入排序

时间和空间复杂度

要点

  • 将数组分为两部分[0----low-1][low----a.length-1]
    • 左边[0-----low-1]是已排序部分
    • 右边[low------a.length-1]是未排序部分
  • 每次从未排序区域取出low位置的元素,插入到已排序区域

代码

  

public static int[] test(int[] array) {// 外层循环,从数组第二个元素开始for (int low = 1; low < array.length; low++) {// 记录当前元素值int t = array[low];// 从当前元素的前一个位置开始向前查找插入位置int i = low - 1;while (i >= 0 && t < array[i]) {// 如果当前元素小于已排序元素,将已排序元素后移一位array[i + 1] = array[i];i--;}// 找到插入位置,将当前元素插入if (i != low - 1) {array[i + 1] = t;}}// 返回排序后的数组return array;}

测试结果

public static void main(String[] args) {int[] array = {3,1,2,4,7,9};int[] ary = test(array);System.out.println(Arrays.toString(ary));}

希尔排序

时间和空间复杂度

要点

  • 简单来说,就是分组实现插入,魅族元素间隙称为hap
  • 每轮排序之后gap逐渐变小,直到gap为1完成排序
  • 对插入排序的优化,让元素更快地交换到最终位置

代码

public static int[] test(int[] array) {// 此时的gap就是间隙for (int gap = array.length >> 1; gap >= 1 ; gap = gap >> 1) {for (int low = gap; low < array.length ; low++) {// 记录当前位置的元素值int t = array[low];// 初始化比较位置为当前位置的前一个位置int i = low - gap;// 当比较位置合法且当前元素值小于比较位置的元素值时进行插入排序while (i >= 0 && t < array[i]){// 将比较位置的元素往后移动gap个位置array[i + gap] = array[i];// 更新比较位置为前一个gap位置i -= gap;}// 如果实际插入位置不是当前位置的前一个gap位置,则进行插入操作if (i != low - gap){array[i + gap] = t;}}}// 返回排序后的数组return array;}

测试结果

public static void main(String[] args) {int[] array = {3,1,2,4,7,9};int[] ary = test(array);System.out.println(Arrays.toString(ary));}

http://www.tj-hxxt.cn/news/118886.html

相关文章:

  • 网站推广链接怎么做下载官方正版百度
  • 湖北seo网站推广成都seo招聘
  • 如何给自己网站做优化最新腾讯新闻
  • 当阳网站建设必应收录提交入口
  • 苏通建设集团有限公司网站河北网站建设制作
  • 千万不要去苏州打工搜狗搜索排名优化
  • 在线做分析图的网站做网络推广怎么收费
  • 基于j2ee的网站开发设计开题报告seo建站
  • 个人网站内容有哪些内容百度推广介绍
  • 无锡网站制作哪家好效果好的东莞品牌网站建设
  • 做么户网站怎么去前置审批佛山网站定制
  • 长沙商业网站建设网页设计与制作教程
  • 东莞网站开发前三强吉林关键词优化的方法
  • 张掖专业做网站的公司寰宇seo
  • 一网学网站是真的吗怎么开网店新手入门
  • 珠海响应式网站建设价格国内最好用免费建站系统
  • 服装网站建设目标客户百度联盟推广
  • 做网站一天能赚多少钱搜索引擎搜索器
  • 个人简历模板网站名风seo软件
  • 当今做网站的流行seo零基础教学视频
  • 汕头网站建设推广方法软文广告图片
  • 如果做微商需不需要开个网站新闻头条今日新闻60条
  • 教你做cpa单页网站网络的推广方式有哪些
  • wordpress考试系统插件云南网站建设快速优化
  • 做网站的相关教程新东方
  • 新手学做网站 下载网络营销事件
  • 东莞网站建设报价整站seo优化哪家好
  • 徐州做网站管理的公司小吃培训机构排名前十
  • 局域网怎么做网站短视频seo排名加盟
  • 个人做外贸网站违法吗品牌seo是什么