1. 冒泡排序

  冒泡排序是一种简单的排序算法,它重复的走访要排序的数列,一次比较两个元素,如果顺序错误就把它们进行交换。

  • a 比较相邻的两个元素,如果前面的大于后面的,就交换它们的位置;
  • b 对每一对相邻元素作相同的工作,从第一对到最后一对,这样进行完后最后的元素应该是最大的数;
  • c 针对除了最后一个元素外的所有元素重复上面的步骤;
  • d 重复a-c,直到排序完成。

代码实现:

package com.westos.test;import java.util.Arrays;public class BubbleSort {public static void main(String[] args) {int[] arr = new int[]{1,20,4,5,9,7,3,20,45,63};System.out.println("未排序的数组:"+Arrays.toString(arr));bubbleSort(arr);System.out.println("排序后的数组:"+Arrays.toString(arr));}public static void bubbleSort(int[] arr){//外层循环控制一共比较几轮for (int i = 0; i < arr.length-1; i++) {//内层循环控制每轮比较几次for (int j = 0; j < arr.length-1-i; j++) {//判断前后元素大小if (arr[j] > arr[j+1]){int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}
}

执行结果:

2. 快速排序

  快速排序采用分治法将一个串(list)分为两个子串(sub-list);

  • 从数列挑出一个数,作为基准数;
  • 重新排列数列,比基准数大的放在基准数后,比基准数小的放在基准数前;
  • 递归的把基准数前后两个子串的数列重新排列。

代码实现:

package com.westos.test;import java.util.Arrays;public class QuickSort {public static void swap(int[] arr,int startIndex,int endIndex){int temp = arr[startIndex];arr[startIndex] = arr[endIndex];arr[endIndex] = temp;}public static void quickSort(int[] arr,int start,int end){/** @author: ZYH* @description: TODO* data:  20:26* @param arr 数组名* @param start 数组开始的下标* @param end 数组结束的下标* @return void*/if (arr != null && arr.length > 0){//记录基准数和要排序的下标int stard = arr[start];int low = start;int high = end;//循环查找比基准数小的元素和比基准数大的元素while (low < high){//从右向左查找比基准数小的元素,放在基准数之前while (low < high){if (arr[high] < stard){swap(arr,low,high);break;}else{high--;}}//从左向右查找比基准数大的元素,放在基准数之后while (low < high){if (arr[low] > stard){swap(arr,low,high);break;}else{low++;}}}//再对分区进行排序//如果low-1>start,就说明分区的排序还未完成if ((low-1) > start){quickSort(arr,start,low-1);}if ((high+1) < end){quickSort(arr,high+1,end);}}}public static void main(String[] args){int[] arr = new int[]{1,5,6,4,7,8,5,2,3,65,23};System.out.println("未排序的数组:"+ Arrays.toString(arr));quickSort(arr,0,arr.length-1);System.out.println("快排后的数组:"+Arrays.toString(arr));}
}

执行结果:

数据结构和算法——八种常用的排序算法----交换排序(冒泡排序和快速排序)相关推荐

  1. 八种常用的排序算法(转)

    下面要讲到的8种排序都属于内部排序,既在内存中完成,主要从理论原理方面来分析的.    插入排序 ①直接插入排序 例:六个数12 15 9 20  6 31 24 用直接插入排序,如下图: 思路: 第 ...

  2. 数据结构常考题 —— 八种经典内部排序算法

    经典排序算法 我们经典的排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 算法复杂度如下图: 下面我们 ...

  3. java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...

    本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...

  4. 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序

    这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插入排序 ...

  5. 视觉直观感受7种常用的排序算法

    1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通 ...

  6. 视觉直观感受 7 种常用的排序算法

    2019独角兽企业重金招聘Python工程师标准>>> 1. 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较 ...

  7. 7 种常用的排序算法直观感受

    1. 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序 ...

  8. 几种常用的排序算法之JavaScript实现

    文章目录 插入排序 二分插入排序 选择排序 选择排序 冒泡排序 快速排序 堆排序 归并排序 桶排序 计数排序 插入排序 <html> <script> /* 1)算法简介插入排 ...

  9. 通过视觉直观感受7种常用的排序算法

    1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通 ...

  10. 算法基础:常用的排序算法知识笔记

    1.算法外排序分类 2.冒泡排序 冒泡排序(Bubble Sort)属于交换排序,它的原理是:循环两两比较相邻的记录,如果反序则交换,直到没有反序的记录为止. 实现算法: /** * 冒泡排序优化后的 ...

最新文章

  1. 属于我们的纪念日-相识一周年 - 生活至上,美容至尚!
  2. 十八、二叉树遍历序列还原
  3. java招聘 试题_JAVA现场招聘考试题(一)
  4. python人工智能——机器学习——分类算法-k近邻算法
  5. 将VIM配置成强大的IDE(三)
  6. Codeforces Round #741 (Div. 2)
  7. [spring-framework]Spring定时器的配置和使用
  8. 快速正确的修改变量的命名和如何正确规范的注释
  9. Python字符串isdecimal()
  10. weex官方demo weex-hackernews代码解读(上)
  11. LINUX内核段错误调试详细指南精品培训PPT讲义
  12. 数据库小计和总计之 Rollup函数 简单介绍
  13. IE Tab Plus 安装设置说明
  14. 联想台式电脑一键恢复后桌面没有计算机了,联想笔记本一键恢复功能使用教程...
  15. 幼儿园调查过程怎么写_如何写幼儿园调查问卷总结
  16. Lazada代运营分享—Lazada新手运营快速提升流量交易额的三大核心技巧
  17. 第三代酷睿i3处理器_英特尔最新10代处理器发布:游戏世界最快
  18. 电子火折子的电路原理
  19. 硅谷钢铁侠:埃隆 · 马斯克告诉你这个残酷的世界规则
  20. 基于机器学习的航空公司客户价值分析与流失预测

热门文章

  1. 记录一次Centos磁盘空间占满的解决办法(转)
  2. 【学习笔记:计算几何基础3】 Convex Hull
  3. 富文本编辑器-Ueditor传值
  4. js判断移动端或是pc端
  5. Entity framework 配置文件,实现类,测试类
  6. 谈谈HtmlControl与WebControl的区别与用途
  7. shell引入sql脚本报错_Oracle11g rac集群安装执行脚本报错的解决方法
  8. 拓端tecdat|爬取微博用户行为数据语义分析数据挖掘报告
  9. SQL Server添加Check约束
  10. Java实现常见的排序算法