键盘输入一个任意数字字符串例如: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));
}
}
运行结果: