Java数组与排序问题

数组

Java中包括基本类型和对象类型,其中数组属于对象类型。(虽然在C++中数组也是基本类型)

int[] a;
a=new int[100];
//int[] a=new int[100]

数组存储在其他的地址中,a中指保存内个地址。
数组一旦创建,大小不会改变。初始化为空null,当我们尝试访问含有null数组数据项时,会得到空指针报错。
数组可以按照无须数组和有序数组来进行分别学习。

算法时间复杂度
线性查找O(N)(还可以)
二分查找O(logN)(良好)
无序数组的插入O(1)(优秀)
有序(无序)数组的删除O(N)
有序数组的删除O(N)

简单排序

  • 冒泡排序
public void bubleSort(){
    int out,in;
    for(out=n-1;out>1;out--){
        for(in=0;in<out;in++){
            if(a[in]>a[in+1]) 
                swap(in,in+1);
            }
        }
    }//end
private void swap(int m,int n){
    long temp=a[m];
    a[m]=a[n];
    a[n]=temp;
    }

思路:数组由小到大进行排序,每次将两个相邻的数据进行比较,将大的那个放在右边,整一套下来,保证了最大的在最右边。也就是说内部的in的循环结束后,下标大于out的数据项已经排好。
时间复杂度:O(N^2),可以说是相当慢了

  • 选择排序
public void selectionSort(){
    int out,in,min;
    for(out=0;out<n-1;out++){
        min=out;
        for(in=out+1;in<n;in++){
            if(a[in]<a[min]) min=in;
        swap(out,min);//swap()函数同上,实际交换的是引用的位置
        }
    }
}//end

不同于冒泡排序中数组下标大于out的总是有序的,在选择排序中,数组下标小于in的总是有序的。
选择排序中,进行的比较次数和冒泡排序中的一样多,但是交换次数只有O(N),但是我们认为N值很大时,时间复杂度依然是O(N^2)。但是选择排序会比冒泡排序要快很多啦。
- 插入排序

public void insertionSort(){
    int in,out;
    for(out=1;out<n;out++){
        long temp=a[out];
        in=out;
        while(in>0&&a[in-1]>temp){
            a[in]=a[in-1];
            --in;
            }
        a[in]=temp;
        }
    }

每一趟之后,比out下标小的总是有序的。out标记了未排序部分的最左端数据,in从out变量向左移动,直到temp值小于in所指的数组数据项。
适用于基本有序的数组。


tips:
复制是交换的三倍
在插入排序中,一个数据项被插入到局部有序的组合后,他将永远不会向左边移动。
稳定性是指在对州进行排序时,每个周的城市还要求按照人口递增排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值