1,排序算法(8)
一. 冒泡排序 (交换次数最多10 最少0 比较次数10)
(1)
int[] a = {5,2,7,4,9};
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-i-1;j++){
if(a[j]>a[j+1]){
swap(a,j,j+1);
}
}
}
for(int c:a){
System.out.println(c);
}
(2)
int[] a = {1,2,3,4,5,7,6};
int count = 0;
for(int i=0;i<a.length-1;i++){
count++;
boolean b = false;
for(int j=0;j<a.length-i-1;j++){
if(a[j]>a[j+1]){
b = true;
swap(a,j,j+1);
}
}
if(!b){
break;
}
}
System.out.println(count);
for(int c:a){
System.out.println(c);
}
二 .选择排序 交换次数最多4 最少0 比较次数10
int[] a = {5,2,7,4,9};
for(int i=0;i<a.length-1;i++){
int min_index = i;
for(int j=i+1;j<a.length;j++){
if(a[j]<a[min_index]){
min_index = j;
}
}
if(min_index!=i){
swap(a,i,min_index);
}
}
for(int c:a){
System.out.println(c);
}
三.插入排序 交换次数最多0 最少0 比较次数最多10 最少5
int[] a = {5,2,7,4,1};
for(int i=1;i<a.length;i++){
int temp = a[i];
int j = i-1;
for(;j>=0&&temp<a[j];j--){
a[j+1]=a[j];
}
a[j+1] = temp;
}
for(int c:a){
System.out.println(c);
}
四 .快速排序
五 .希尔排序
六 .堆排序
七 .基数排序
八 .归并排序
2,习题
(1) 定义一个5个元素组成的一维数组,对其赋值,再把该数组反向输出。
int[] a = {1,2,3,4,5};
for(int i=a.length-1;i>=0;i--){
System.out.println(a[i]);
}
(2) 定义一个包含10个元素的数组,对其进行赋值,使每个元素的值等于其下标
int[] a= new int[10];
for(int i=0;i<a.length;i++){
a[i] = i;
}
(3) 定义一个10个元素组成的一维数组,求该数组中的最大值和最小值。及最大值和最小值的平均值 。
int[] a = {4,5,8,9,2,3,5,7,5,0};
int max = a[0];
int min = a[0];
for(int s:a){
if(s>max){
max = s;
}
if(s<min){
min = s;
}
}
System.out.println(max+" "+min+" "+(max+min)/2.0);
(4)定义一个10个元素组成的一维数组,求该数组中的最大值,以及最大值在该数组中的位置。
int[] a = {4,5,8,9,2,3,5,7,5,0};
int max = 0;
int min = 0;
for(int i=1;i<a.length;i++){
if(a[i]>a[max]){
max = i;
}
if(a[i]<a[min]){
min = i;
}
}
System.out.println(max+" "+min);
(5) 在一个由5个元素组成的一维数组中 查找一个数字‘5’,如果该有数组中有此元素,由提示“数字5在此数组中”。
int[] a = {4,5,8,9,2,3,5,7,5,0};
for(int s:a){
if(s==5){
System.out.println("数字5在此数组中");
break;
}
}
(6) 在一个由5个元素组成的一维数组中 查找一个已经定义好的数字,如果该有数组中有此元素,由提示“此数组中有***数字”,
如果此数组中没有则提示“该数字不在此数组中”
int[] a = {4,5,8,9,2,3,5,7,5,0};
boolean flag = false;
for(int s:a){
if(s==6){
flag = true;
break;
}
}
if(flag)
System.out.println("此数组中有***数字");
else
System.out.println("该数字不在此数组中");
(7) 求一个由10个元素组成的一维数组中,所有元素的平均值
int[] a = {4,5,8,9,2,3,5,7,5,0};
double sum = 0;
for (int b:a) {
sum += b;
}
3,内存赋值
int[] a = {5,2,7,4,9};
int[] b = a;
int[] b = {5,2,7,4,9};
b[1] = 8;
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
4,遍历 增强型for循环
int[] b = {5,2,7,4,9};
for(int c:b){
System.out.println(c);
5,自带排序
toindex:取不到
Integer[] b = {5,2,7,4,1};
Arrays.sort(b,1,4);
Arrays.parallelSort(b,1,4);
swap(b,1,3);
for(int c:b){
System.out.println(c);