avatar

java实现冒泡排序和选择排序

java实现冒泡排序和选择排序

冒泡排序

package com.csw.sort;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

/**
* @Auther: 行路
* @Date: Created on 2020/4/19 13:55 星期日
* @Description: com.csw.sort 冒泡排序 时间复杂度(n^2)
* @version: 1.0
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {3, 9, -1, 10, 20};
sort1(arr);
sort2(arr);
testTime();//80000个数据排序测试时间

}

/**
* 冒泡排序
*
* @param arr
*/
public static void sort1(int arr[]) {
System.out.println("初代冒泡排序--------");
int temp = 0; //临时变量
//将最大的数排到最后
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
// System.out.println("第"+(i+1)+"趟排序");
// System.out.println(Arrays.toString(arr));
}
}


/**
* 优化冒泡排序
*
* @param arr
*/
public static void sort2(int arr[]) {
System.out.println("优化冒泡排序--------");
int temp = 0; //临时变量
boolean flag = false; //表示变量,表示是否进行交换
//将最大的数排到最后
for (int i = 0; i < arr.length - 1; i++) {

for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
flag = true;
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
// System.out.println("第"+(i+1)+"趟排序");
// System.out.println(Arrays.toString(arr));
if (!flag) { //在一趟排序中,一次交换也没有发生过
break;
} else {
flag = false; //重置false ,进行下次判断
}
}
}

/**
* 80000个数据排序测试时间
*/
public static void testTime() {

int[] arr = new int[80000];
for (int i = 0; i < 80000; i++) {
arr[i] = (int) (Math.random() * 80000);
}

Date date1 = new Date();
SimpleDateFormat simpleDateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date1Str = simpleDateFormatter.format(date1);
System.out.println("排序前的时间是=" + date1Str);

sort1(arr);

Date date2 = new Date();
// SimpleDateFormat simpleDateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date2Str = simpleDateFormatter.format(date2);
System.out.println("排序后的时间是=" + date2Str);
}
}

选择排序

package com.csw.sort;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

/**
* @Auther: 行路
* @Date: Created on 2020/4/19 14:46 星期日
* @Description: com.csw.sort 选择排序
* @version: 1.0
*/
public class SelectSort {
public static void main(String[] args) {
int[] arr = {101, 34, 119, 1};
selectSort(arr);
testTime(); //80000个数据排序测试时间
}

/**
* 使用逐步指导的方式来,讲解选择排序
* 第一轮
* 原始初始值 101,34,119,1
* 第一轮排序 :1,34,119,101
* 算法,先简单后复杂,就是可以把一个复杂的算法,拆分成简单的问题,逐步解决
* <p>
* 自己的理解:将每一次排序的第一个元素假定为最小值,定义俩变量一个记录值,一个记录下标用于交换
*
* @param arr
*/
public static void selectSort(int[] arr) {
System.out.println("选择排序~~~~~");
//在推导过程中
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
int min = arr[minIndex];
for (int j = i + 1; j < arr.length; j++) {
if (min > arr[j]) {
min = arr[j];
minIndex = j;
}
}
//当for循环结束时,将最小值放在arr[0],即交换
if (minIndex != i) {
arr[minIndex] = arr[i];
arr[i] = min;
}
// System.out.println("第"+(i+1)+"轮后~~");
// System.out.println(Arrays.toString(arr));
}
}

public static void testTime() {
int[] arr = new int[80000];
for (int i = 0; i < 80000; i++) {
arr[i] = (int) (Math.random() * 80000);
}

Date date1 = new Date();
SimpleDateFormat simpleDateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date1Str = simpleDateFormatter.format(date1);
System.out.println("排序前的时间是=" + date1Str);

selectSort(arr);

Date date2 = new Date();
// SimpleDateFormat simpleDateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date2Str = simpleDateFormatter.format(date2);
System.out.println("排序后的时间是=" + date2Str);
}
}
文章作者: Todcsw
文章链接: https://todcsw.github.io/2020/04/19/dataStructure-java%E5%AE%9E%E7%8E%B0%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F%E5%92%8C%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 行路のblog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论