package com408;
/*使用某个排序算法*/
public class Test2021 {
int i,j;
public static void main(String[] args) {
//调用compareSort方法
int[] a={25,-10,25,10,11,19};
int[] array1={1,1,1,2,2,3};
int[] array2={3,2,2,1,1,1};
int[] b=new int[6];
compareSort(array1, b, 6);
}
//此时需要进行传入的是两个数组 并且在传入的过程中需要将数组的长度进行传入
public static void compareSort(int a[],int b[],int n) {
int[] count=new int[n];
//这里定义一个变量 作用就是为了记录循环进行多少次比较 这样可以方便之后进行count长度的比较
int numberCount=0;
System.out.println("初始化操作之后的count数组为==>");
for (int i = 0; i < n; i++) {
//对count数组中的元素进行初始化操作
count[i]=0;
System.out.print(count[i]+" ");
}
System.out.println();
System.out.println("初始化操作结束,开始进行下一步的操作");
//首先对传入的数组a进行遍历操作
System.out.println();
System.out.println("首先对传入的数组a进行遍历操作");
for (int i = 0; i < a.length-1; i++) {
System.out.print(a[i]+" ");
}
System.out.println();
System.out.println("++++++++++++++++++++++++++++++++++++++++++");
for (int i = 0; i < n-1; i++) {
for (int j = i+1; j < n; j++) {
System.out.println("*************************************************");
System.out.println("在本轮操作中,对应的a[i]和a[j]的值分别是:");
System.out.println("a[i]="+a[i]);
System.out.println("a[j]="+a[j]);
if (a[i]<a[j]) {
System.out.println("此时a[i]<a[j]需要进行count[j]++操作");
count[j]++;
System.out.println("此时的count[j]对应的值是:"+count[j]);
}else{
System.out.println("此时a[i]>=a[j]需要进行count[i]++操作");
count[i]++;
System.out.println("此时的count[i]对应的值是:"+count[i]);
}
numberCount++;
}
}
//开始对数组b中的元素进行赋值操作
System.out.println("本次执行需要进行比较次数是:"+numberCount);
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
System.out.println("开始对数组b中的元素进行赋值操作");
System.out.println("单元测试:打印数组b中的所有元素的值");
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
for (int i = 0; i < n; i++) {
b[count[i]]=a[i];
System.out.print("数组b中所有元素对应的下标的值为:"+count[i]+" ");
System.out.println("遍历数组b得到===>"+b[count[i]]);
}
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
//最后在c语言中调用free函数将对应的count数组中的元素进行删除操作
}
}
最终测试结果
数组b中所有元素对应的下标的值为:2 遍历数组b得到===>1
数组b中所有元素对应的下标的值为:1 遍历数组b得到===>1
数组b中所有元素对应的下标的值为:0 遍历数组b得到===>1
数组b中所有元素对应的下标的值为:4 遍历数组b得到===>2
数组b中所有元素对应的下标的值为:3 遍历数组b得到===>2
数组b中所有元素对应的下标的值为:5 遍历数组b得到===>3
关于算法的稳定性的相关问题
第三问中的问题
关于算法稳定性的修改
i < j,按这个逻辑,前面的会计数count[i]++,
最后就是 count[0] = 1, count[1] = 0,逆序了
要稳定的话,应该是 if(a[i] <= a[j]) count[j]++;