目录
2.2快速排序法 例fsort(重载mode可以控制从大到小或从小到大)
一、代码
public class FastSort {
public static void main(String[] args) {
int[] a = {546,4,54,21,4,54,5,21,54,5,121,54};
fsort(a);
coutIntToString(a);
}
public static void camp(int[] a,int pos1,int pos2){//交换数据
int temp;
temp = a[pos1];
a[pos1] = a[pos2];
a[pos2] = temp;
}
public static void sort(int[] a){//从大到小
for(int j = 1;j<a.length;j++)
for(int i = 0;i<a.length-j;i++)
if(a[i]<a[i+1])camp(a,i,i+1);
}
/**
*
* @param a 需要进行排序的数组
* @param l 排序的左区间
* @param r 排序的右区间
*/
public static void fsort(int[] a,int l,int r){//从大到小
if(l>r) return;
int base = a[l];
int i = l;
int j = r;
while (i != j){
while (a[j]>=a[l]&&i<j) j--;
while (a[i]<=a[l]&&i<j) i++;
if(i < j) camp(a,j,i);
}
camp(a,l,i);
fsort(a,l,i-1);
fsort(a,i+1,r);
}
/**
* @param a 需要进行排序的数组
*/
public static void fsort(int[] a){//从大到小
int base = a[0];
int i = 0;
int j = a.length-1;
while (i < j){
while (a[j]>=a[0]&&i<j) j--;
while (a[i]<=a[0]&&i<j) i++;
if(i < j) camp(a,j,i);
}
camp(a,0,i);
if(0>=a.length-1) return;
fsort(a,0,i-1);
fsort(a,i+1,a.length-1);
}
/**
*
* @param a 需要进行排序的数组
* @param mode 0:从小到大 1:从大到小
*/
public static void csort(int[] a,char mode){
for(int j = 0;j<a.length;j++){
int pos = j;
if(mode == '>')
for(int i = j+1;i<a.length;i++){
if(a[pos]>a[i]) pos=i;
}
if(mode == '<')
for(int i = j+1;i<a.length;i++){
if(a[pos]<a[i]) pos=i;
}
camp(a,j,pos);
}
}
public static void csort(int[] a){//从大到小
for(int j = 0;j<a.length;j++){
int pos = j;
for(int i = j+1;i<a.length;i++){
if(a[pos]<a[i]) pos=i;
}
camp(a,j,pos);
}
}
/**
*
* @param a 打印数组a
*/
public static void cout(int []a){
for(int b:a)
System.out.println(b);
}
public static void cout(char []a){
for(int b:a)
System.out.println(b);
}
public static void cout(short []a){
for(short b:a)
System.out.println(b);
}
public static void cout(byte []a){
for(byte b:a)
System.out.println(b);
}
public static void cout(long []a){
for(long b:a)
System.out.println(b);
}
public static void cout(double []a){
for(double b:a)
System.out.println(b);
}
public static void cout(float []a){
for(float b:a)
System.out.println(b);
}
public static void coutIntToChar(int []a){
for(int b:a)
System.out.println((char)b);
}
public static void coutIntToString(int []a){
System.out.print("[");
for(int b=0;b<a.length;b++){
System.out.print(a[b]);
if(b<a.length-1)
System.out.print(",");
}
System.out.println("]");
}
public static void coutIntToString_Char(int []a){
System.out.print("[");
for(int b=0;b<a.length;b++){
System.out.print((char)a[b]);
if(b<a.length-1)
System.out.print(",");
}
System.out.println("]");
}
}
二、知识点
1、方法重载
重载标记:参数不同(数量、类型)
例:代码段中的cout语句
重载意义:提高程序兼容性