1.元素定位排序
思想:比较一个元素小于等于多少个元素,对其位置进行定位输出
最坏情况运行时间:O(n^2)
最佳运行时间:O(n^2)
先上代码()对数组int[] a;进行排序
int[] a1 = Arrays.copyOf(a, a.length);
for(int c:a1){
int e = a.length;//用来给元素定义位置的
int f = 0;//用来判断相同元素的数量,
for(int d:a1){
if(c<=d){
e--;
}
if(c==d){
f++;
};
}//得出元素的值,位置,和数量
for(int g =0;g<f;g++){
a[e+g] = c;
}
}
通过数组遍历,比较一个元素c小于多少个其他元素,就可以直接得出这个元素c,在数组中的位置。
(附上完整代码)import java.util.Arrays;
import java.util.Random;
public class JackSelect_sort {
public static void main(String[] args) {
//取随机数组
Random b =new Random();
int[] a = new int[10];
for(int i=0;i<10;i++){
a[i] = b.nextInt(100);
}
System.out.println("原数组:\t"+Arrays.toString(a));
//进行排序
int[] a1 = Arrays.copyOf(a, a.length);
for(int c:a1){
int e = a.length;//用来给元素定义位置的
int f = 0;//用来判断相同元素的数量,
for(int d:a1){
if(c<=d){
e--;
}
if(c==d){
f++;
};
}//得出元素的值,位置,和数量
for(int g =0;g<f;g++){
a[e+g] = c;
}
}
//a数组排序结束
System.out.println("排序数组:\t"+Arrays.toString(a));
}
}
2.直线扫描法()
思想:假设数组每个值下标X轴,其数组的值为Y值。通过for(int i=min;i<=Integer.MAX_VALUE;i++);定义一条可以移动的直线,当遇到直线的值,按顺序在数组中排好。
最坏情况运行时间:O(n*(max-min))
最佳运行时间:O(n*(max-min))
也就是说,当数组中重复值较多,且数组值(max-min)较小时,适用该方法。 也许暂时还没有用,但我相信每个东西都有优缺点,,在等开发把。
上代码把public static void main(String[] args) {
//取随机数组
Random b =new Random();
int[] a = new int[10];
for(int i=0;i<10;i++){
a[i] = b.nextInt(100);
}
System.out.println("原数组:\t"+Arrays.toString(a));
//进行排序
int min = 0;
int f = 0;
int[] a1 = Arrays.copyOf(a, a.length);
for(int d:a1){
if(min>d){
min=d;
}
}
for(int i=min;i<=Integer.MAX_VALUE;i++){
for(int c:a1){
if(i==c){
a[f] = c;
f++;
}
}
if(f==a1.length){break;};
}
System.out.println("排序后数组\t"+Arrays.toString(a));
}
希望大家多多指出漏洞,共同学习!!!