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

通过数组遍历,比较一个元素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

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

希望大家多多指出漏洞,共同学习!!!

你可能感兴趣的:(菜鸟,本人初学,我是要成为大牛的人,原创,数组,排序,算法,java)