常用排序算法及其实现
排序算法的分类
- 插入排序(直接插入排序,折半插入排序,希尔排序)
- 交换排序(冒泡排序,快速排序)
- 选择排序(直接选择排序,堆排序)
- 归并排序
- 基数排序
冒泡、直接选择排序、直接插入排序为简单排序。也是最容易掌握和理解的。
- 冒泡排序
1 /** 2 * 冒泡 O(n^2) 3 * @param args 4 */ 5 public static void BubbleSort(int[] args){ 6 int temp=0; 7 for(int i=0;i<args.length;i++) 8 for(int j=0;j+i<args.length-1;j++) 9 { 10 if(args[j]>args[j+1]) 11 { 12 temp=args[j+1]; 13 args[j+1]=args[j]; 14 args[j]=temp; 15 } 16 } 17 }
- 选择排序
/*** 选择排序 O(n^2)*/public static void SelectionSort(int[] a){for(int i=0;i<a.length;i++){int k=i;for(int j=i+1;j<a.length;j++){if(a[k]>a[j])k=j;}if(k!=i){int temp=a[k];a[k]=a[i];a[i]=temp;}}}
- 插入排序
/*** 直接插入排序 O(n^2)* 局部有序扩展到全部有序。*/public static void insertionSort(int[] a ){int in,out; //in为有序区指针变量,out为无序区指针变量for( out=1;out<a.length;out++) {int temp=a[out];in = out; //把out所指位置归入到有序区,然后进行有序区排序while(in>0&&temp<a[in-1]){ // System.out.println("a[in]:"+a[in]+"---in:"+in);a[in]=a[in-1];--in;}a[in]=temp; // for(int i=0;i<a.length;i++) // System.out.println(+a[i]+"---");}//end ---for }
- 快速排序
/*** * 划分算法(快速排序的基础)* @param a* @param pivot*/public static int partitionIt(int[] a ,int l,int r,int pivot){int leftPtr,rightPtr,left,right;left=l; right=r;leftPtr=left-1; //leftPtr用于最终指向的比pivot大数(包括本身)rightPtr=right; //rightPtr用于最终指向的比pivot小的数(包括本身)System.out.println("\npivot--->left--->right--->:"+pivot+"--->"+left+"--->"+right);while(true){while(a[++leftPtr] < pivot) ;while(rightPtr > left && a[--rightPtr] >pivot);if( rightPtr <= leftPtr )break;else{int temp=a[rightPtr];a[rightPtr]=a[leftPtr];a[leftPtr]=temp; }}//end while(true)//把枢轴上的数插入到全排序后所对应的位置//(因为leftPtr最终指向是大于枢轴的数(包括本身),交换后则可以保证leftPtr所在位置的右边的数都比枢轴大,左边同理,都比枢轴小,即最终位置就是leftPtr)int temp2=a[leftPtr];a[leftPtr]=pivot;a[right]=temp2; return leftPtr;}/*** * 快速排序* @param a* @param lp 数组的左边界* @param rp 数组的右边界*/public static void quickSort(int[] a,int lp,int rp){if(lp>=rp)return;else{int pivot=a[rp]; //取最右边的值作为枢轴int partition=partitionIt(a, lp, rp,pivot);quickSort(a,lp,partition-1);quickSort(a,partition+1,rp);}}
转载于:https://www.cnblogs.com/hellocsl/p/3594398.html
常用排序算法及其实现相关推荐
- 常用排序算法对比(时间复杂度、稳定性)
常用排序算法对比
- 视觉直观感受7种常用排序算法
视觉直观感受若干常用排序算法 1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状 ...
- C++STL常用排序算法
C++STL常用排序算法 学习目标 算法简介 sort 功能描述 函数原型 示例 总结 random_shuffle 功能描述 函数原型 示例 总结 merge 功能描述 函数原型 示例 总结 rev ...
- java实现apriori算法_七大经典、常用排序算法的原理、Java 实现以及算法分析
0. 前言 大家好,我是多选参数的程序员,一个正再 neng 操作系统.学数据结构和算法以及 Java 的硬核菜鸡.数据结构和算法是我准备新开的坑,主要是因为自己再这块确实很弱,需要大补(残废了一般) ...
- java 性能 排序_Java常用排序算法及性能测试集合
package algorithm.sort; import java.lang.reflect.Method; import java.util.Arrays; import java.util.D ...
- 机器学习(二十二)——推荐算法中的常用排序算法, Tri-training
推荐算法中的常用排序算法 Pointwise方法 Pranking (NIPS 2002), OAP-BPM (EMCL 2003), Ranking with Large Margin Princi ...
- [转载] java实现四种常用排序算法
参考链接: 用Java排序 四种常用排序算法 ##注:从小到大排 ##冒泡排序## 特点:效率低,实现简单 思想:每一趟将待排序序列中最大元素移到最后,剩下的为新的待排序序列,重复上述步骤直到排完所有 ...
- Visual C# 诠释常用排序算法
Visual C# 诠释常用排序算法 前段时间因为项目需要,做了个用来对数组排序的类,顺便把以前学过的几种排序算法用C#实现一下.用C#的一些机制来诠释了一下算法的是实现.在阅读本之前,需要一些对C# ...
- 各种常用排序算法的时间复杂度和空间复杂度
https://blog.csdn.net/jiajing_guo/article/details/69388331 一.常用排序算法的时间复杂度和空间复杂度表格 二.特点 1.归并排序: (1)n大 ...
- Unity3D教程:手游开发常用排序算法 -下
五.堆排序(Heap Sort) 1. 基本思想: 堆排序是一树形选择排序,在排序过程中,将R[1..N]看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择最小 ...
最新文章
- 无需重启, 使用Xephyr调试awesome
- python 爬虫实例-Python 爬虫:Scrapy 实例(二)
- 《编程珠玑(第2版•修订版)》—第2章2.5节原理
- Oracle数据库DBA必备基本技能
- RU大神手册上要再“做”的题
- php_D3_“简易聊天室 ”实现的关键技术 详解
- 带你进入 jBPM 工作流的世界
- UVa 220 黑白棋 算法竞赛入门经典 习题4-3
- 贷还是不贷:如何用 Python 和机器学习帮你决策?
- vue+element 将密码输入框的小圆点显示为星号
- Windows10 CUDA11.0安装cudnn8.0.4安装环境配置VS运行及卸载方法
- 硬件系统工程师宝典(3)-----信号完整性分析是个啥?
- 使用three.js/webgl开发智慧城市场景的一些总结
- Unity 给手游用的高性能辉光(Bloom) Shader
- 史上最完整的人工智能书单大全
- CISSP-D1-安全与风险管理
- 基于MiniSTM32的mpu6050学习笔记(一)
- First-Blood
- 5步加速时间智能分析之 Power BI 篇【附模型下载】
- 施耐德 m340 编程手册_施耐德推出开放自动化平台 开启“软件驱动自动化”时代...
热门文章
- lambda表达式学习(详细理解 ) 重点在最后
- 2021年高考成绩什么时候查询辽宁,2021年辽宁高考成绩什么时候几点可以查
- mysql 无法创建用户_mysql不能创建用户
- 4核处理器_买电脑选4核、6核还是8核,从业是十年的专家终于讲清楚了差异
- php星期和时间获取
- php 批量删除挂马文件夹,万能删除服务器被挂马后删不掉的文件夹
- 服务器安装系统教程进光盘界面,iso光盘系统怎么安装系统教程
- linux精简版远程登录,Linux下如何定制SSH来简化远程访问
- python标签打印工具_NiceLabel Designer 2017条码标签打印软件
- Android报加密错误,在android中解密使用aes/gcm/nopadding加密的消息时出错