Java 实现常见排序算法

Java 实现常见排序算法

1. 综述

  复习常见排序算法,用Java实现。

 

2. 代码

  1 package cn.edu.tju.scs;
  2 
  3 public class Sort {
  4     public static void main(String [] args){
  5         
  6         int[] intArray = {3, 5, 1, 4, 7, 9, 8, 2, 6};
  7         System.out.print("排序前:");print(intArray);
  8         long beginTime = System.nanoTime();
  9         
 10 //        bubbleSort(intArray);
 11 //        selectSort(intArray);
 12 //        insertionSort(intArray);
 13 //        mergeSort(intArray);
 14 //        quickSort(intArray);
 15 //        heapSort(intArray);
 16 
 17         long endTime = System.nanoTime();    
 18         System.out.print("排序后:");print(intArray); 
 19         System.out.println("用时:" + (endTime - beginTime) + "ns");
 20     }
 21 
 22     private static void heapSort(int[] intArray) {
 23         // build Max Heap
 24         for (int i = intArray.length - 1; i >= 0; i--)
 25             maxHeapify(intArray, intArray.length - 1, i);
 26         
 27         for (int i = intArray.length - 1; i > 0; i--) {
 28             swap(intArray, 0, i);
 29             maxHeapify(intArray, i - 1, 0);
 30         }
 31     }
 32 
 33     private static void maxHeapify(int[] intArray, int lastNode, int rootNode) {
 34         int lchild = 2 * rootNode + 1;
 35         int rchild = lchild + 1;
 36 
 37         // has two children
 38         while (lchild < lastNode) {
 39             if (intArray[rootNode] >= intArray[lchild] && intArray[rootNode] >= intArray[rchild])
 40                 return;
 41             
 42             if (intArray[lchild] >= intArray[rchild]) {
 43                 swap(intArray, lchild, rootNode);
 44                 rootNode = lchild;
 45             } else {
 46                 swap(intArray, rchild, rootNode);
 47                 rootNode = rchild;
 48             }
 49             lchild = 2 * rootNode + 1;
 50             rchild = lchild + 1;
 51         }
 52         // has only left child
 53         if (lchild == lastNode) {
 54             if (intArray[rootNode] < intArray[lchild])
 55                 swap(intArray, lchild, rootNode);
 56         }
 57     }
 58 
 59     private static void quickSort(int[] intArray) {
 60         quickSort(intArray, 0, intArray.length - 1);
 61     }
 62 
 63     private static void quickSort(int[] intArray, int begin, int end) {
 64         if (end - begin < 1) return;
 65         if (end - begin < 2){
 66             if (intArray[end] < intArray[begin])
 67                 swap(intArray, begin, end);
 68             return;
 69         }
 70         // partition begin
 71         int left = begin;
 72         int right = end;
 73         int x = intArray[left];
 74         while (left < right) {
 75             while (intArray[right] >= x && left < right) 
 76                 right--;
 77             if (left < right){
 78                 intArray[left] = intArray[right];
 79                 left++;
 80             }
 81             
 82             while (intArray[left] < x && left < right) 
 83                 left++;
 84             if (left < right){
 85                 intArray[right] = intArray[left];
 86                 right--;
 87             }
 88         }
 89         intArray[right] = x;
 90         // partition end
 91         quickSort(intArray, begin, right - 1);
 92         quickSort(intArray, right + 1, end);
 93     }
 94 
 95     private static void mergeSort(int[] intArray) {
 96         mergeSort(intArray, 0, intArray.length - 1);
 97     }
 98 
 99     private static void mergeSort(int[] intArray, int begin, int end) {
100         if (end - begin < 2){
101             // sort 2 number
102             if (intArray[begin] > intArray[end])
103                 swap(intArray, begin, end);
104         } else {
105             int mid = (begin + end) / 2;
106             mergeSort(intArray, begin, mid);
107             mergeSort(intArray, mid + 1, end);
108             merge(intArray, begin, mid, end);
109         }
110     }
111 
112     private static void merge(int[] intArray, int begin, int mid, int end) {
113         int [] tmpArray = new int[end - begin + 1];
114         int iter1 = begin;
115         int iter2 = mid + 1;
116         int i = 0;
117         while (iter1 <= mid && iter2 <= end) {
118             if (intArray[iter2] < intArray[iter1]) {
119                 tmpArray[i] = intArray[iter2];
120                 iter2++;
121                 i++;
122             } else {
123                 tmpArray[i] = intArray[iter1];
124                 iter1 ++;
125                 i++;
126             }                
127         }
128         if (iter1 > mid){
129             for (int j = iter2; j <= end; j++) {
130                 tmpArray[i++] = intArray[j];
131             }
132         }
133         if (iter2 > end){
134             for (int j = iter1; j <= mid; j++){
135                 tmpArray[i++] = intArray[j];
136             }
137         }
138         for (i = 0; i < tmpArray.length; i++)
139             intArray[begin + i] = tmpArray[i];
140     }
141 
142     private static void insertionSort(int[] intArray) {
143         
144         for (int i = 1; i < intArray.length; i++) {
145             int flag = i;
146             if (intArray[flag] >= intArray[flag - 1])
147                 continue;
148             int temp = intArray[flag]; // temp need to inserted into the sequence
149             if (intArray[flag] < intArray[0]) {
150                 // move all items one back
151                 for (int j = flag; j > 0; j--) {
152                     intArray[j] = intArray[j - 1];
153                 }
154                 intArray[0] = temp;
155             } else {    // need insertion
156                 int left = 0, right = flag - 1, mid = 0;
157                 while (right - left != 1) {
158                     mid = (right + left) / 2;
159                     if (intArray[mid] <= temp)
160                         left = mid;
161                     else 
162                         right = mid;                        
163                 }
164                 for (int j = flag; j > right; j--){
165                     intArray[j] = intArray[j - 1];
166                 }
167                 intArray[right] = temp;
168             }
169         }
170     }
171 
172     private static void selectSort(int[] intArray) {
173         int tmp = 0;
174         for (int i = 0; i < intArray.length; i++) {
175             tmp = intArray[i];
176             for (int j = i + 1; j < intArray.length; j++)
177                 if (tmp > intArray[j]) {
178                     int temp = tmp;
179                     tmp = intArray[j];
180                     intArray[j] = temp;
181                 }
182             intArray[i] = tmp;
183         }        
184     }
185 
186     private static void print(int[] intArray) {
187         for(int i : intArray) {
188             System.out.print(i + " ");
189         }
190         System.out.println();
191     }
192 
193     private static void bubbleSort(int[] intArray) {
194         for(int i = 0; i < intArray.length; i++)
195             for(int j = 0; j < intArray.length - 1 - i; j++)
196                 if(intArray[j] > intArray[j + 1])
197                     swap(intArray, j, j + 1);
198     }
199 
200     private static void swap(int[] intArray, int i, int j) {
201         int tmp = intArray[i];
202         intArray[i] = intArray[j];
203         intArray[j] = tmp;
204     }
205 }

 

转载于:https://www.cnblogs.com/yongheng20/p/5748054.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python用import xlwt出现红字_如何用python处理excel

最近看到有很多的python课程是教人怎么用python处理excel,我看了一下价格收费还贼高...这么初级毫无水平的操作我的粉丝们就不要花钱去报课程了..我免费教你们怎么做.首先我们先要安装两个模块,一个叫做xlrd,一个是xlwt.安装如下:打开cmd输入pip install xlrd等待安装成功,成功…

什么是升职率?

我确实相信您熟悉彼得原则 。 一般而言&#xff0c;该原则是一种观察&#xff0c;即晋升可能并且将导致晋升人员不再符合该职位的条件。 对于JVM&#xff0c;存在类似的问题。 太快地提升对象可能会对性能产生重大影响。 在这篇文章中&#xff0c;我们将探讨提升率的概念&…

mysql自增id用完了_MySQL表自增id用完了该怎么办?

我们知道MySQL表可以定义一个自增长的id&#xff0c;如果我们的表没有指定主键字段&#xff0c;那MySQL会给我们的表创建一个不可见的&#xff0c;长度为6个自己的row_id&#xff0c;然后不停地往上加步长&#xff0c;虽然生活中自然数是没有上限的&#xff0c;但是在计算机里&…

jmeter插件监控cpu小节点

JMeter使用plugins插件进行服务器性能监控 性能测试时&#xff0c;我们的关注点有两部分 1 服务本身&#xff1a;并发响应时间 QPS 2 服务器的资源使用情况&#xff1a;cpu memory I/O disk等 JMeter的plugins插件可以实现对"二"的监控&#xff0c;具体操作步骤如下(…

mysql写入监控_zabbix监控mysql操作

说明&#xff1a;配置zabbix自带Mysql模板# 创建目录mkdir /var/lib/zabbix# 创建连接数据库文件touch /var/lib/zabbix/.my.cnf# 写入数据连接信息[client]host 192.168.0.148user rootpassword 123dffsdfs# 创建监控项文件touch /etc/zabbix/zabbix_agentd.conf.d/userpar…

openshift_云上的播放框架变得简单:Openshift模块

openshift仅仅几年前&#xff0c;找到一个负担得起的Java Web应用程序托管解决方案是一项艰巨的任务&#xff0c;而寻找免费的托管解决方案是一项不可能的任务。 更不用说考虑自动缩放&#xff0c;单命令部署&#xff0c;持续集成等问题了&#xff0c;这简直就是科幻小说。 去年…

json数据格式了解

json数据格式介绍&#xff1a; https://en.wikipedia.org/wiki/JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式 json语法是JavaScript对象表示法语法的子集&#xff1a; 键值对逗号分隔花括号保存对象方括号数据json的键(字段名)是字符串(双引号) json的值…

xclock 不出来界面_macOS 使用 XQuartz 支持 X11 实现 Linux 图形化界面显示

更多奇技淫巧欢迎订阅博客&#xff1a;https://fuckcloudnative.io前言在 Windows 中相信大家已经很熟悉使用 Xmanager(Xshell), MobaXterm, SecureCRT 通过 X11 实现 Linux 图形化界面显示&#xff0c;我的需求是在 macOS 下使用 iTerm2 作为 Terminal 实现 X11 图形化界面显示…

命令设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试

ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试 原文:ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试第一篇、GP降雨量等值线建模、发布及测试在水利、气象等行业中&#xff0c;要在WebGIS中实现空间分析功能&#xff0c;如绘制等…

win10企业版更新和安全中没有 “恢复”这个选项_通知:微软已强制对Windows 10更新升级...

最近&#xff0c;微软发布了Windows10的强制升级。从本月开始&#xff0c;如果您的个人电脑、笔记本电脑和其他设备没有手动升级&#xff0c;微软将强制部分用户升级到Windows10 1909或2004版本。原因很简单。微软已经停止支持Windows10 1903版&#xff08;包括家庭版和专业版&…

Oracle数据库之数据类型

Oracle数据库之数据类型 Oracle基本数据类型&#xff08;亦叫内置数据类型&#xff0c;internal datatypes或built-in datatypes)可以按类型分为&#xff1a;字符串类型、数字类型、日期类型、LOB类型、LONG RAW&RAW类型、ROWID&UROWID类型。 下面介绍常用的Oracle数据…

docker 多个mysql_mysql8.0 利用docker容器安装配置多主多从集群

1. 在/user/local/share/下创建mysql文件夹&#xff0c;在mysql文件夹目录下创建4个文件夹分别是:master1, master2, slave1, slave2分别在每个目录下建立data, conf, logs用于数据持久化创建后如下2.创建容器&#xff1a;1)创建一个名为master1的mysql容器(主 mysql)docker ru…

JavaFX 2.0和Scala,例如牛奶和饼干

JavaFX 2.0和Scala都是很好的技术&#xff0c;但是一起使用时效果会更好。 JavaFX 2.0是一种功能强大的富客户端技术&#xff0c;具有先进的图形&#xff0c;动画和媒体功能。 Scala是一种简单但功能强大的语言&#xff0c;具有用于编写特定于域的语言&#xff08;DSL&#xff…

两张图片互相切换

图片切换 $(.selectarea img).click(function () { if ($(this).attr("src") "/Content/images/persornalZL/select01.jpg") { $(this).attr("src", "/Content/images/persornalZL/select02.jpg"); } else { $(this).attr("src&…

thinkphp+mysql+join+where_thinkphp5.0 多join时where无法between

情况类似于这个链接,这帖子的老哥没有答案,现在遇到一样的问题了,下面贴上代码$map [products.insurance_status>1];//是否计算下线的产品if( input(get.times) && input(get.times) < 7 ){$time return_times(input(get.times));//此处有bug$map[order.pay_ti…

访客设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

console.log()与alert()的区别

1、alert() a、有阻塞作用&#xff0c;不点击确定&#xff0c;后续代码无法继续执行 b、alert只能输出string&#xff0c;如果alert输出的是对象&#xff0c;会自动调用toString()方法 eg&#xff1a;alert([1,2,3]);//1,2,3 c、alert不支持多个参数的写法&am…

报名照片审核处理工具_太浦军考|2020年文职人员报名照片审核程序,照片处理工具应该如何使用?...

考文职 找太浦 最靠谱照片处理工具使用说明01注意&#xff1a;一、本工具是报名照片审核处理工具&#xff0c;只有通过该审核工具审核通过的照片才能在注册时正常上传。照片将应用在准考证和合格证书中。二、源文件必须是标准证件数字照片&#xff0c;JPG或JPEG格式&#xff0c…

ANT基本操作

1.输入输出 1.1 输入   不能执行交互式操作。只能采取下面的形式&#xff1a; 1.1.1 变量 ① 其中已经预定义的变量有&#xff1a; 属性 解释 ant.file 该构建文件的完整地址 ant.version 安装的 Apache Ant 的版本 basedir 构建文件的基目录的绝对路径&#xff0c;作…