常用排序算法总结

package com.company;
import java.util.Arrays;
import java.util.Scanner;
public class ArraysDemo {
public static void main(String[] args) {

}
}
class BubbleSort{
/*
冒泡排序
需求:给定一个数组,将它相邻的两个数依次进行排序,输出最大值和最小值
例如:-1,54,36,89,0,45
第一轮:-1,54,36,89,0,45
-1,36,54,89,0,45
-1,36,54,89,0,45
-1,36,54,0,89,45
-1,36,54,0,45,89
第二轮:-1,36,54,0,45,89
-1,36,54,0,45,89
-1,36,0,54,45,89
-1,36,0,45,54,89
第三轮:-1,36,0,45,54,89
-1,0,36,45,54,89
-1,0,36,45,54,89

*/
public static void main(String[] args) {
//定义一个整型数组
int[] arr = {0, 154, 9, 89, -1, 45};
printArray(arr);
Arrays.sort(arr);
printArray(arr);
//定义一个变量接受getMax调用的返回值
int max = getMax(arr);
int min = getMin(arr);
System.out.println("max=" + max); //souf快捷键
System.out.println("min="+min);

}
//打印数组
public static void printArray(int[] arr){
for (int x=0;x<arr.length; x++){
if(x!=arr.length-1){
System.out.print(arr[x]+",");
}else{
System.out.println(arr[x]);
}
}
}
//获取数组中的最大值
public static int getMax(int[] arr) {
//遍历每一轮轮数,数组长度-1(arr.length-1)
for (int i = 0; i < arr.length - 1; i++) {
//遍历每一轮中每相邻两个数比较的次数
for (int j = 0; j < arr.length -1-i; j++) {
//判断这两个数的大小,将较大的数存放在一个变量里,交换位置,最终将较大数输出
if (arr[j] < arr[j+1]) {
/*int temp = arr[j];
//交换位置
arr[j] = arr[j+1];
arr[j+1] = temp;
*/
swap(arr,j,j+1);
}
}
}
return arr[0];

}
//获取数组中的最小值
public static int getMin(int[] arr){
//遍历每一轮轮数,数组长度-1(arr.length-1)
for (int i = 0; i < arr.length - 1; i++) {
//遍历每一轮中每相邻两个数比较的次数
for (int j = 0; j < arr.length -1-i; j++) {
/* //定义一个变量存放较小值
int min = 0;*/
//判断这两个数的大小,将较大的数存放在一个变量里,交换位置,最终将较大数输出
if (arr[j] > arr[j+1]) {
/*int temp = arr[j];
//交换位置
arr[j] = arr[j+1];
arr[j+1] = temp;*/
swap(arr,j,j+1);

}
}
}
return arr[0];
}
//交换位置代码抽取
public static void swap(int[] arr,int a,int b){
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}

}
class ChooseSort{
/*
选择排序,指定位置的元素和后面一个元素比较,遇到比指定元素较小的值,交换位置,直到左侧出现最小值,停
例如:110,10,25,57,20,-1
10,110,25,57,20,-1
10,25,110,57,20,-1
10,25,57,110,20,-1
10,25,57,20,110,-1
-1,10,25,57,20,110
*/
public static void main(String[] args) {
int[] arr = {110,10,25,57,20,-1};
//定义一个变量接受getMin方法中的返回值
int min=getMin(arr);
System.out.println("min="+min);

}
public static int getMin(int[] arr){
for (int i=0;i<arr.length-1;i++){
//遍历第一个元素与后面元素的比较 x=i+1表示数组中指定的第一个元素与后面元素依次比较的次数
for (int x=i+1;x<arr.length;x++){
//判断每次遍历后第一个元素与后面元素哪个值小
if (arr[i]>arr[x]){
//定义一个临时变量存放最小值
int temp = arr[i];
//交换位置
arr[i]=arr[x];
arr[x]=temp;

}
}
}
return arr[0];//返回的是数组下标数
}
}
class ArrOperate {
/*
需求:定义一个数组,实现对数组添加和删除操作
*/
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print("请输入您要创建数组的长度:");
//给定一个数组的长度
int[] arr = new int[s.nextInt()];
//定义一个输入几个数的累加器
int num = 1;
//遍历要输入的数,并存放在数组中
for (int i = 0; i < arr.length; i++) {
System.out.print("请输入" + num + "个数:");
arr[i] = s.nextInt();
num++;
}

//遍历数组
System.out.print("原数组为:");
for (int a : arr) { //遍历(for each)数组arr,将每一次访问数组中的arr元素存入变量a中

System.out.print(a + "\t");

}
//向指定的位置插入数
System.out.println("\n"+"请输入要插入数的位置:");
//定义一个变量,指定要存放这个数的位置
int index = s.nextInt();
System.out.print("您要插入的这个数为:");
int n = s.nextInt();
arrAdd(arr,index,n);
System.out.println("\n"+"请输入要删除的这个数");
int x= s.nextInt();
int m=x-1;
//int[] arras;
//arras=arrAdd(arr,index,n);
deleteArray(arr,m);

}

public static int[] arrAdd(int[] arrs, int index, int n) {
//用下标值判断新数组的长度
if (index >= 0 && index< arrs.length) {
//扩容
int[] newArry = Arrays.copyOf(arrs, arrs.length + 1);
newArry[index] = n;

//遍历新数组
for (int i = index + 1; i < newArry.length; i++){
newArry[i]=arrs[i-1];
}
arrs=newArry;
//将新数组与原来的数组重新遍历
for (int i=0;i<newArry.length;i++){
System.out.print(arrs[i]+" ");

}
}
return arrs;

}
public static void deleteArray(int[] arr,int index){
if(index>=0 && index<arr.length){
//删除
for (int i=0;i<arr.length-1;i++){
//
if (index<=i){
arr[i]=arr[i+1];
}
}
//
int[] c=Arrays.copyOf(arr,arr.length-1);
arr=c;
for (int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}

}
else {
System.out.println(" ");
}
}
}

posted @ 2018-06-23 13:16  lovebean  阅读(130)  评论(0编辑  收藏  举报