1.冒泡排序
import java.util.Arrays;
public class Test0921 {
//把输出函数封装到一个函数里,打印时直接调用
public static void testBubbleSort(int[] a){
System.out.println("排序前:");
System.out.println(Arrays.toString(a));
bubbleSort(a);
bubbleSort1(a);
System.out.println("排序后:");
System.out.println(Arrays.toString(a));
}
//冒泡排序
public static void swap(int[] a,int i,int j){
int t=a[i];
a[i]=a[j];
a[j]=t;
}
//第一种方法:无序[0,a.length-i);有序[a.length-i,a.length)
public static void bubbleSort(int[] a){
for(int i=0;i<a.length;i++){
boolean sorted=true;
//冒泡过程
for(int j=1;j<a.length-i;j++){
if(a[j-1]>a[j]){
swap(a,j-1,j);
sorted=false;
}
}
if(sorted==true){
return;
}
}
}
//第二种方法:无序[i,a.length);有序[0,i)
public static void bubbleSort1(int[] a){
for(int i=0;i<a.length;i++){
for(int j=a.length-1;j>i;j--){
if(a[j]<a[j-1]){
swap(a,j,j-1);
}
}
}
}
public static void main(String[] args){
int[] a={1,2,3,4,5,6,7};
int[] b={7,6,5,4,3,2,1};
int[] c={3,5,2,4,1,7,6};
int[] d={3,3,3,3,3,3,3};
testBubbleSort(a);
testBubbleSort(b);
testBubbleSort(c);
testBubbleSort(d);
}
}
2.去掉一个最大值和一个最小值求平均数
public class Test0921 {
//去掉一个最大值和一个最小值求平均数
public static double average(int[] a){
int sum=0;
int max=Integer.MIN_VALUE;
int min=Integer.MAX_VALUE;
for(int v:a){
sum+=v;
if(v>max){
max=v;
}
if(v<min){
min=v;
}
}
return (double)(sum-max-min)/(a.length-2);
}
public static void main(String[] args){
int[] a={7,6,5,4,3,2,1};
System.out.println(average(a));
}
}
3.旋转数组
import java.util.Arrays;
public class Test0921 {
public static int[] rotate(int[] a,int k){
k=k%a.length; //若旋转的数超过数组长度,则取余,因为旋转数组长度个数还是原来的数组
int[] rightPart=Arrays.copyOfRange(a,a.length-k,a.length);
System.out.println(Arrays.toString(rightPart));
System.arraycopy(a,0,a,k,a.length-k);
System.out.println(Arrays.toString(a));
System.arraycopy(rightPart,0,a,0,k);
return a;
}
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5, 6, 7};
System.out.println(Arrays.toString(rotate(a, 3)));
System.out.println(Arrays.toString(rotate(a, 14)));
}
}
4.将数组里偶数放在右边,奇数放在左边
import java.util.Arrays;
public class Test0921 {
public static void swap(int[] a,int i,int j){
int t=a[i];
a[i]=a[j];
a[j]=t;
}
//第一种方法
public static int[] partition(int[] a){
//begin和end相当于是两个指针
//[begin,end]区间内的是未判断的数
//[0,begin) 偶数
//[end,a.length) 奇数
int begin=0;
int end=a.length-1;
while(begin<end){
while(begin<end&&a[begin]%2==0){
begin++;
}
while(begin<end&&a[end]%2!=0){
end--;
}
swap(a,begin,end);
//这里的交换之所以不用a[begin],a[end],而是begin,end是因为调用的是swap函数,swap函数的形参是下标,第二个方法同理
}
return a;
}
//第二种方法
public static int[] partition1(int[] a){
int d=0;
for(int i=0;i<a.length;i++) {
if (a[i] % 2 == 0) {
swap(a, i, d);
d++;
}
}
return a;
}
public static void main(String[] args){
int[] a={3,6,2,7,4,1,5,9};
System.out.println(Arrays.toString(partition(a)));
System.out.println(Arrays.toString(partition1(a)));
}
}