(第3讲)简单排序:冒泡。选择。插入
2016-06-20 12:11
316 查看
首先对这三种简单排序进行比较:
1、冒泡
package com.three;
public class myBubble {
public static void main(String[] args) {
int[] a= {77,99,44,55, 22, 88,-96 ,11 ,0, 66,33,-5 };
mybubble2 b = new mybubble2(a);
b.sort();
}
}
//冒泡排序
class mybubble2{
private int[] a;
public mybubble2(int[] a){
this.a = a;
}
public void sort(){
for(int i=0;i<a.length;i++){
for(int j = 0;j<a.length-1-i;j++){
if(a[j]>a[j+1]){
int temp = a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
System.out.println();
}
}
结果是:
-96 -5 0 11 22 33 44 55 66 77 88 99
2、选择
package com.three;
public class Select {
public static void main(String[] args) {
int[] a= {77,99,44,55, 22, 88 ,11 ,0, 66,33 };
myselect insert = new myselect(a);
insert.sort();
}
}
//选择排序
class myselect{
private int[] a;
public myselect(int[] a){
this.a = a;
}
//选择排序
public void sort(){
for(int i=0;i<a.length;i++){
int minindex = i;
for(int j=i+1;j<a.length;j++){
if(a[j]<a[minindex]){
minindex = j;
}
}
int temp = a[i];
a[i]=a[minindex];
a[minindex]=temp;
}
//遍历
for(int i=0;i<a.length;i++){
System.out.print (a[i]+" ");
}
System.out.println();
}
}
结果是:
0 11 22 33 44 55 66 77 88 99
3、插入
package com.three;
public class Insert {
public static void main(String[] args) {
int[] a= {77,99,44,55, 22, 88 ,11 ,0, 66,33 };
myInsert insert = new myInsert(a);
insert.sort();
}
}
//插入排序
class myInsert{
private int[] a;
public myInsert(int[] a){
this.a = a;
}
//排序方法
public void sort(){
for(int i=1;i<a.length;i++){
int value = a[i];
int valueIndex = i;
while(valueIndex>0&&a[valueIndex-1]>=value){
//将前边一位右移
a[valueIndex] = a[valueIndex-1];
//将前一位的位置空出来
valueIndex--;
}
//将插入的值插入到空出来的那个位置
a[valueIndex]= value;
}
//遍历
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
System.out.println();
}
}
结果是:
0 11 22 33 44 55 66 77 88 99
冒泡 | 选择 | 插入 | |
比较次数 | N(N-1)/2 | N(N-1)/2 | N(N-1)/4 |
交换次数 | N^2/4 | N | N(N-1)/4 |
不变性 | out右边有序 | out左边有序(下标小于等于out的项有序) | 下标小于等于out的项部分有序 |
package com.three;
public class myBubble {
public static void main(String[] args) {
int[] a= {77,99,44,55, 22, 88,-96 ,11 ,0, 66,33,-5 };
mybubble2 b = new mybubble2(a);
b.sort();
}
}
//冒泡排序
class mybubble2{
private int[] a;
public mybubble2(int[] a){
this.a = a;
}
public void sort(){
for(int i=0;i<a.length;i++){
for(int j = 0;j<a.length-1-i;j++){
if(a[j]>a[j+1]){
int temp = a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
System.out.println();
}
}
结果是:
-96 -5 0 11 22 33 44 55 66 77 88 99
2、选择
package com.three;
public class Select {
public static void main(String[] args) {
int[] a= {77,99,44,55, 22, 88 ,11 ,0, 66,33 };
myselect insert = new myselect(a);
insert.sort();
}
}
//选择排序
class myselect{
private int[] a;
public myselect(int[] a){
this.a = a;
}
//选择排序
public void sort(){
for(int i=0;i<a.length;i++){
int minindex = i;
for(int j=i+1;j<a.length;j++){
if(a[j]<a[minindex]){
minindex = j;
}
}
int temp = a[i];
a[i]=a[minindex];
a[minindex]=temp;
}
//遍历
for(int i=0;i<a.length;i++){
System.out.print (a[i]+" ");
}
System.out.println();
}
}
结果是:
0 11 22 33 44 55 66 77 88 99
3、插入
package com.three;
public class Insert {
public static void main(String[] args) {
int[] a= {77,99,44,55, 22, 88 ,11 ,0, 66,33 };
myInsert insert = new myInsert(a);
insert.sort();
}
}
//插入排序
class myInsert{
private int[] a;
public myInsert(int[] a){
this.a = a;
}
//排序方法
public void sort(){
for(int i=1;i<a.length;i++){
int value = a[i];
int valueIndex = i;
while(valueIndex>0&&a[valueIndex-1]>=value){
//将前边一位右移
a[valueIndex] = a[valueIndex-1];
//将前一位的位置空出来
valueIndex--;
}
//将插入的值插入到空出来的那个位置
a[valueIndex]= value;
}
//遍历
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
System.out.println();
}
}
结果是:
0 11 22 33 44 55 66 77 88 99
相关文章推荐
- [leetcode] 【排序】 21. Merge Two Sorted Lists
- 一个二维码,苹果安卓两种下载方案
- iOS 开发中的各种证书简要说明
- 要嫁就嫁程序员,钱多话少死得早~
- 新版MATERIAL DESIGN 官方动效指南(一)
- 新版MATERIAL DESIGN 官方动效指南(一)
- nQLogViewer 查看BIEE日志
- LeetCode 346. Moving Average from Data Stream
- 51CTO学院三周年大庆之管家发福利
- springMVC 静态文件 访问
- JavaScript arguments对象
- Linux性能分析之mpstat&iostat&sar&vmstat
- 在 Java 词汇中没有“虚拟方法”一说
- java编码转换过程
- JS优秀插件收集
- Android OkHttp完全解析
- (第2讲)无序数组与有序数组的增删查
- CentOs下安装Crab
- IOCTL命令-_IO, _IOR, _IOW, _IOWR 幻数的理解
- 动态规划算法解最长公共子序列LCS问题