java设计一个o n 2 的算法_(1)常见O(n^2)排序算法解析

一、选择排序

1、原始数组

0a862bc6b88a0a5edde8ad6273368c74.png

2、遍历数组找到最小值索引,并将最小值索引与当前遍历索引位置互换

1ffc9bd9cfd0fbf8cfb9d80af8555c01.png

3、确定最小位置值,进行下一次遍历

277bafb9776a1c4b65f16e31c5cb87fc.png

4、java代码实现

/**

* author:sam

* date:2018/1/26 14:11

* describe:选择排序

*/

public void selectSort(int[] arr){

for (int i = 0; i < arr.length; i++) {

int minIndex = i;

for (int j = i; j < arr.length; j++) {

if(arr[minIndex] > arr[j])

minIndex = j;

}

SortUtils.swap(arr,minIndex,i);

}

}

二、插入排序  扑克牌整理牌型时思想,对于有序数组效率非常高。

1、以[0]位置数据为基点依次遍历后续数据

a4d82ab64cc1f7318f5e84c915f21bbf.png

2、后续数据依次与当前数据进行比较,并将数据插入到合适位置

3a59787b19e2eb2122aba96abda1ed9a.png

3、进行下依次插入

fc64887d6e25d36d5617838d3b29d561.png

4、java代码实现

/**

* author:sam

* date:2018/3/7 10:49

* describe:插入排序

*/

@Override

public void insertSort(int[] arr) {

for (int i = 1; i < arr.length; i++) {

for (int j = i; j > 0 && arr[j] < arr[j-1]; j--){

SortUtils.swap(arr, j, j - 1);

}

}

}

5、插入排序优化

3a43064e919d3e19c6beb280a670fd3b.png

/**

* author:sam

* date:2018/3/7 12:21

* describe:插入排序优化

*/

@Override

public void optimizeInsertSort(int[] arr) {

for (int i = 1; i < arr.length; i++) {

int e = arr[i];

int index = i;

for (int j = i; j > 0 && arr[j-1] > e; j--) {

arr[j] = arr[j - 1];

index = j - 1;

}

arr[index] = e;

}

}

三、冒泡排序

1、冒泡排序

/**

* author:sam

* date:2018/3/7 14:37

* describe:冒泡排序

*/

public void bubbleSort(int[] arr){

for (int i = 0; i < arr.length; i++) {

for (int j = 0; j < arr.length - i -1; j++) {

if(arr[j] > arr[j+1]){

SortUtils.swap(arr,j,j+1);

}

}

}

}

2、冒泡排序优化

/**

* author:sam

* date:2018/3/7 14:49

* describe:优化冒泡排序

*/

@Override

public void optimizeBubbleSort(int[] arr){

/*boolean flag;

int n = arr.length;

do{

flag = false;

for (int i = 1; i < n; i++) {

int j;

if(arr[i] < arr[j = i-1]) {

SortUtils.swap(arr, i, j);

flag = true;

}

}

n--;

}while(flag);*/

boolean flag;

int n = arr.length;

do{

flag = false;

int j;

for (int i = 0; i < n - 1; i++) {

if(arr[i] > arr[j = i + 1]){

SortUtils.swap(arr,i,j);

flag = true;

}

}

n--;

}while(flag);

}

四、shell排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值