Jack:w3自创数组排序,直接用元素定位,算法复杂度O(n^2),另附上一种 我也不知道适不适用的方法。

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));
	}

希望大家多多指出漏洞,共同学习!!!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值