算法培训(一)---排序算法
排序算法有很多种,一个算法的好坏主要看它的空间复杂度和时间复杂度,而很多时候,我们不会在意空间复杂度,因为我们现在的计算机内存非常大,不用在意这一点空间的消耗。下面说一下几种常用的排序算法。
冒泡排序,选择排序,插入排序,鸡尾酒排序,希尔排序,快速排序(填坑法,双指针法)
冒泡排序
package 算法第一节;//冒泡排序public class Sort1 {public static void main(String[] args){int [] a = {6,8,1,9,7,5,3,2,10,4};sort(a);for(int i=0;i<10;i++){System.out.println(" "+a[i]);}}public static void sort(int a[]){for(int i=0;i<10;i++){for(int j=0;j<10-i-1;j++){if(a[j]>a[j+1]){int temp=0;temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}}}}
选择排序
package 算法第一节;//选择排序public class Sort2 {public static void main(String[] args){int [] a = {6,8,1,9,7,5,3,2,10,4};for(int i=0;i<10;i++){int min=i;for(int j=i+1;j<10;j++){if(a[min]>a[j]){min = j;}}swap(a,min,i);System.out.println(a[i]);}}public static void swap(int a[],int min,int i){int temp;temp = a[min];a[min] = a[i];a[i]=temp;}}
插入排序
package 算法第一节;//插入排序public class Sort3 {public static void main(String[] args){int [] a = {6,8,1,9,7,5,3,2,10,4,2,2,0,6,52,26,2,03,6,1};for(int i=0;i<a.length;i++){for(int j=i;j>0&&a[j]<a[j-1];j--) {swap(a,j,j-1);}}for(int i=0;i<a.length;i++){System.out.println(a[i]);}}public static void swap(int a[],int m,int n){int temp;temp = a[m];a[m] = a[n];a[n] = temp;}}
鸡尾酒排序
package 算法第一节;//鸡尾酒排序法public class Sort4 {public static void main(String[] arg){int [] a = {6,8,1,9,7,5,3,2,10,4};sort(a);for(int i=0;i<10;i++){System.out.println(" "+a[i]);}}public static void sort(int a[]){int start = 0;int end = 9;while(start<end){for(int j=start;j<end;j++){if(a[j]>a[j+1]){int temp=0;temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}end--;for(int j=end;j>start;j--){if(a[j]<a[j-1]){int temp=0;temp = a[j];a[j] = a[j-1];a[j-1] = temp;}}start++;}}}
希尔排序
package 算法第一节;//希尔排序public class Sort5 {public static void main(String[] arg){int [] a = {9,5,7,4,1,6,3,0,2,8};sort5(a);for(int i=0;i<a.length;i++){System.out.println(a[i]);}}public static void sort5(int []a) {int gap = a.length/2;while(gap>=1) {for(int i=gap;i<a.length;i++) {int temp = a[i];int j = i-gap;while(j>=0&&temp<a[j]){a[j+gap]=a[j];j = j - gap;}a[j+gap] = temp;}gap/=2;}}// public static void swap(int a[],int m,int n)// {// int temp;// temp = a[m];// a[m] = a[n];// a[n] = temp;// }}
快速排序—填坑法
package 算法第一节;//快速排序---填坑法public class Sort6 {public static void main(String[] arg){int [] a = {8,2,1,5,7,9,0,3,4,6};int start=0;int end=a.length-1;quickSort(a,start,end);for(int i=0;i<a.length;i++){System.out.println(a[i]);}}public static int Partition(int [] a,int start,int end){int pivot = a[start];while(start<end){while(start<end&&pivot<a[end])end--;a[start] = a[end];while(start<end&&pivot>=a[start])start++;a[end] = a[start];}a[start] = pivot;return start;}public static void quickSort(int [] a,int start,int end){if(start<end){int pos = Partition(a,start,end);quickSort(a,start,pos-1);quickSort(a,pos+1,end);}}}
快速排序—双指针法
package 算法第一节;//快速排序---双指针法 public class Sort7 {public static void main(String[] arg){int [] a = {8,2,1,5,7,9,0,3,4,6};int start=0;int end=a.length-1;quickSort(a,start,end);for(int i=0;i<a.length;i++){System.out.println(a[i]);}}public static void quickSort(int[] arr, int start, int end) {if (start >= end) {return;}//基准位置默认地一个元素int pivot = arr[start];int left = start;int right = end;while (right > left) {//右指针循环左移while (left < right && arr[right] > pivot) {right--;}//左指针循环右移while (left < right && arr[left] <= pivot) {left++;}if(left<right){int tem = arr[left];arr[left] = arr[right];arr[right] = tem;}}//基准位置与重合时left与right交换int tem = arr[left];arr[left] = pivot;arr[start] = tem;quickSort(arr, start, left - 1);quickSort(arr, left + 1, end);}}
测试多组数组排序,几种方法出现了差异。测试时随机数的产生也会影响测试时间。
算法培训(一)---排序算法相关推荐
- 数据结构之排序算法:内部排序算法的应用与比较
排序算法:内部排序算法的应用与比较 思维导图: 比较: 应用: 思维导图: 比较: 应用:
- 冒泡排序算法和选择排序算法比较
冒泡排序算法详细内容见→冒泡排序算法. 选择排序算法详细内容见→选择排序算法. 冒泡排序算法和选择排序算法的区别: 冒泡排序是比较相邻位置的两个数:而选择排序是按顺序比较,找出最大值或者最 ...
- 算法基础:排序算法之冒泡排序
算法基础:排序算法之冒泡排序 实现:数列有序排序 思想:已知一个数列,令数列中相邻的两个元素一一做比较,按照小大的顺序(或从大到小的顺序),如果前一个数比后一个数大(或后一个数比前一个数大),则互换( ...
- 伍六七带你学算法 进阶篇-排序算法
给定一个整数数组 nums,将该数组升序排列. 示例 1: 输入:[5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:[5,1,1,2,0,0] 输出:[0,0,1,1,2,5] 各排序算 ...
- python常见的排序算法_常见排序算法之python实现
1. 冒泡排序 时间复杂度为O(n^2), 稳定的排序算法 思路:一开始比较的区间是[0,n-1],依次比较相邻两数,哪个数大哪个数就放在后面,这样一次遍历数组后,最大的数会在数组的最后一个位置,然后 ...
- ef 排序string转int_排序算法之基本排序算法
基本排序算法 选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未 ...
- 【每日算法】桶排序算法
1)算法简介 桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里.每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序 ...
- java8 lambda 排序算法,Java8中排序算法比较器的三种写法(使用lambda表达式实现Comparator比较器)...
在涉及到数组, 集合等这些地方经常会需要用到排序算法, 在Java中的Collections类中有sort方法, 除了需要传入一个Comparator比较器, 或者需要排序的类实现了Comparabl ...
- java排序算法总结_排序算法总结及Java实现
1. 整体介绍 分类 排序大的分类可以分为两种,内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.主要需要理解的都是内排序算法: 内排序可以分为 ...
- 快速排序算法_常用排序算法之快速排序
点击上方蓝色 "铁匠学编程" 关注我,让我们一起学习! 前天给大家分享了归并排序,但是它不是原地排序算法,需要消耗额外的内存空间,今天给大家分享的是江湖无人不知无人不晓的" ...
最新文章
- 1012. 数字分类 java_PAT-B-1012. 数字分类(Java)
- 和lock一起学beego 博客系统开发为例(六)
- 亚马逊手机端测评软件/PC端测评软件各有什么优缺点?
- LVS+DR源码安装
- 一道CTF----BUUCTF---练习场---Havefun
- Selenium WebDriver中的TestNG侦听器及示例
- 实现一个Golang的reverse函数
- 【CS231n_2017】2-Image Classification
- Rainbond 5.1.3 发布,快速部署和运维 Spring Cloud 集群
- 转载-深度学习与NLP 深度学习|机器学习|人工智能 精品视频教程合集分享
- lodop转到其他html页面,vue项目中使用Lodop实现批量打印html页面和pdf文件
- android 修改 dpi_努比亚 Z11|魔趣100|安卓10.0|归属地|机型修改|性能调整|稳定流畅...
- 3dmax教程技术:3dmax 怎么去掉贴图_3dmax如何去掉贴图
- Python 批量发送邮件脚本
- 打开计算机窗口的控制菜单,打开控制面板的几种方法
- Thymeleaf行内写法
- API day02 IO流
- 力扣解法汇总589- N 叉树的前序遍历
- JDK8新特性(4)—— stream 流
- 滑动平均滤波/递推平均滤波算法