排序问题
对自定义字符串一维数组中的元素进行排序
快速排序
package test;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
//声明一个数组并初始化
int[] arr = {6,1,2,7,9,3,4,5,10,8};
//快速排序
quickSort(arr,0,arr.length-1);
//输出
System.out.println(Arrays.toString(arr));
}
/**
* 快速排序
* @param arr 待排数组
* @param low 从左往右搜索的开始索引
* @param high 从右往左搜索的开始索引
*/
private static void quickSort(int[] arr, int low, int high) {
//声明开两个变量
int i=low;
int j=high;
//判断
if (i>j) {
return;
}
//基准数记忆
int tmp=arr[low];
//i从左往右搜索的时候,碰到第一个比它大的数,停下来;
//j从右往左搜索,碰到第一个比它小的数,停下来;需要交换
//中间变量
int t=0;
while(i<j){
//j从右往左搜索
while(tmp<=arr[j]&&i<j){
j--;
}
//i从左往右搜索
while(tmp>=arr[i]&&i<j){
i++;
}
if(i<j){
//停下来;需要交换
t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
//判断
//和基准数交换(将基准数归位)
//if(i==j){
arr[low]=arr[i];
arr[i]=tmp;
//}
//将前半部分快速排序(被调用6次)
quickSort(arr, low, i-1);
//将后半部分快速排序
quickSort(arr, i+1, high);
}
}
效果如下
选择排序
package test;
import java.util.Arrays;
/**
* 选择排序法
* @author Administrator
*
*/
public class Sell {
public static void main(String[] args) {
//创建一个数组,并初始化
int[] arr = {1,2,3,4,5};
//声明一个中间变量
int tmp=0;
//外循环
/* i
* 0 1: arr[1]>arr[0] arr[2]>arr[0] arr[3]>arr[0] arr[4]>arr[0]
* 1 2: arr[2]>arr[1] arr[3]>arr[1] arr[4]>arr[1]
* 2 3: arr[3]>arr[2] arr[4]>arr[2]
* 3 4: arr[4]>arr[3]
* */
//控制趟数
for (int i = 0; i < arr.length-1; i++) {
//内循环
//控制两两比较的次数
for (int j = i+1; j < arr.length; j++) {
//比较
if (arr[j]>arr[i]) {
tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
}
}
//输出arr
System.out.println(Arrays.toString(arr));
}
}
选择排序的优化(按最大值索引寻找)
package test;
import java.util.Arrays;
public class Sel2 {
public static void main(String[] args){
//声明一个长度为5的数组并初始化
int[] arr={1,2,3,4,5};
//存储当前的最大值下标
int max=0;
//中间变量
int tmp=0;
//外循环
//趟数
for (int i = 0; i < arr.length-1; i++) {
//设置max
max=i;
//内循环
//比较的次数
for (int j = i+1; j < arr.length; j++) {
if (arr[j]>arr[max]) {
max=j;
}
}
//判断跟当初的约定是否一致
if(max!=i){
tmp=arr[max];
arr[max]=arr[i];
arr[i]=tmp;
}
}
//输出arr
System.out.println(Arrays.toString(arr));
}
}
冒泡排序
package test;
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
//声明一个长度为5的数组并初始化
int[] arr={1,2,3,4,5};
//中间变量
int tmp=0;
//将arr从大往小排序
/* 冒泡 比较次数
* 0:arr[1]>arr[0] arr[2]>arr[1] arr[3]>arr[2] arr[4]>arr[3] 4
* 1:arr[1]>arr[0] arr[2]>arr[1] arr[3]>arr[2] 3
* 2:arr[1]>arr[0] arr[2]>arr[1] 2
* 3:arr[1]>arr[0] 1
*
* */
//外循环
//控制趟数
for (int i = 0; i < arr.length-1; i++) {
//内循环
//控制两两比较的次数
for (int j = 0; j < arr.length-i-1; j++) {
if(arr[j+1]>arr[j]){
tmp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=tmp;
}
}
}
//输出arr
System.out.println(Arrays.toString(arr));
}
}