java冒泡、选择、插入、快速排序算法(升降序)

键盘输入一个任意数字字符串例如:123456
分别以升序和降序形式输出
排序方式使用:冒泡,选择,插入,快速

package util;

import java.util.ArrayList;
import java.util.List;

public class SortMethod {
	private String str="";
	private List<Integer> arrList=new ArrayList<Integer>();
	
	public SortMethod() {
		
	}
	public SortMethod(String str) {
		this.str = str;
		List<Integer> list = getIntegerList(str);
		this.arrList=list;
	}
	//冒泡排序
	public String bubbleSort(boolean isUp) {
		List<Integer> list = this.arrList;
		if(!isUp) {
			//降序
			for(int i = 0;i<list.size()-1;i++) {
				int a = list.get(i);
				for(int j=0;j<list.size()-1-i;j++){
	                if(list.get(j)<list.get(j+1)){
	                	swap(list,j,j+1);
	                }
	            }
			}
		}else {
			//升序
			for(int i = 0;i<list.size()-1;i++) {
				int a = list.get(i);
				for(int j=0;j<list.size()-1-i;j++){
					if(list.get(j)>list.get(j+1)){
						swap(list,j,j+1);
	                }
	            }
			}
		}
		return list.toString();
	}
	
	public String selectSort(boolean isUp){
		List<Integer> list = this.arrList;
		if(isUp){
			//升序
			for(int i = 0; i < list.size()-1; i++){
				int min = i;
				for(int j = i+1; j <list.size();j++){
					if(list.get(j)<list.get(min)){
						min = j;
					}
				}
				if(min!=i){
					swap(list, i, min);
				}
			}
		}else {
			//降序
			for(int i = 0; i < list.size()-1; i++){
				int max = i;
				for(int j = i+1; j <list.size();j++){
					if(list.get(j)>list.get(max)){
						max = j;
					}
				}
				if(max!=i){
					swap(list, i, max);
				}
			}
		}
		
		
		return list.toString();
	}

	public String insertSort(boolean isUp){
		List<Integer> list = this.arrList;
		if(isUp) {
			//升序
			for(int i=1; i<list.size(); i++){
				for(int j=i; j>0; j--){			
					if(list.get(j)<list.get(j-1)){
						swap(list,j,j-1);
					}
				}
			}
		}else {
			for(int i=1; i<list.size(); i++){
				for(int j=i; j>0; j--){			
					if(list.get(j)>list.get(j-1)){
						swap(list,j,j-1);
					}
				}
			}
		}
		
		return list.toString();
	}

	public static void quickSortUp(List<Integer> list, int low, int hight) {
        int i, j, index;
        if (low > hight) {
            return;
        }
        i = low;
        j = hight;
        index = list.get(i); // 用子表的第一个记录做基准
        while (i < j) { // 从表的两端交替向中间扫描
            while (i < j && list.get(j) >= index) {
            	j--;
            }
            if (i < j) {
            	list.set(i,list.get(j));// 用比基准小的记录替换低位记录
            	i++;
            }        	
            while (i < j && list.get(i) < index) {
            	i++;
            }     
            if (i < j) {
            	list.set(j,list.get(i));// 用比基准大的记录替换高位记录
            	j--;
            }
        }
        list.set(i,index);// 将基准数值替换回 list.get(i)
        quickSortUp(list, low, i - 1); // 对低子表进行递归排序
        quickSortUp(list, i + 1, hight); // 对高子表进行递归排序
 
    }
	public static void quickSortDown(List<Integer> list, int low, int hight) {
		int i, j, index;
        if (low > hight) {
            return;
        }
        i = low;
        j = hight;
        index = list.get(i); // 用子表的第一个记录做基准
        while (i < j) { // 从表的两端交替向中间扫描
            while (i < j && list.get(j) <= index) {
            	j--;
            }
            if (i < j) {
            	list.set(i,list.get(j));// 用比基准小的记录替换低位记录
            	i++;
            }        	
            while (i < j && list.get(i) > index) {
            	i++;
            }     
            if (i < j) {
            	list.set(j,list.get(i));// 用比基准大的记录替换高位记录
            	j--;
            }
        }
        list.set(i,index);// 将基准数值替换回 list.get(i)
        quickSortDown(list, low, i - 1); // 对低子表进行递归排序
        quickSortDown(list, i + 1, hight); // 对高子表进行递归排序
 
    }
    public String quickSort(boolean isUp) {
    	List<Integer> list = this.arrList;
    	if(isUp) {
    		quickSortUp(list, 0, list.size() - 1);
    	}else {
    		quickSortDown(list, 0, list.size() - 1);
    	}
    
        return list.toString();
    }
	
	//交换下标a数字与下标b数字的位置
	public static void swap(List<Integer> list,int a,int b){
		int temp=list.get(a);
        list.set(a,list.get(b));
        list.set(b,temp);
	}
	
	//将字符串变为list
	public List<Integer> getIntegerList(String str){
		List<Integer> list = new ArrayList<Integer>();
		for(int i = 0;i<str.length();i++) {
			//去除除了数字外的字符
			char a = str.charAt(i);
			if(Character.isDigit(a)) {
				list.add(Character.getNumericValue(a));
			}
		}
		return list;
	}
	
}
package test;

import java.util.Scanner;

import util.SortMethod;

public class test {
	
	public static void main(String[] args) {

		System.out.println("键盘输入一个任意数字字符串例如123456:");
		Scanner in = new Scanner(System.in);
		String c=in.nextLine();
		SortMethod method = new SortMethod(c);
		System.out.println("冒泡排序升序结果:"+method.bubbleSort(true));
		System.out.println("冒泡排序降序结果:"+method.bubbleSort(false));
		
		System.out.println("选择排序升序结果:"+method.selectSort(true));
		System.out.println("选择排序降序结果:"+method.selectSort(false));
		
		System.out.println("插入排序升序结果:"+method.insertSort(true));
		System.out.println("插入排序降序结果:"+method.insertSort(false));
		
		System.out.println("快速排序升序结果:"+method.quickSort(true));
		System.out.println("快速排序降序结果:"+method.quickSort(false));
		
	}
	
}

运行结果:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值