冒泡、选择、插入排序

冒泡排序的思想:
假设有N个数据需要排序,则从第0个数开始,依次比较第0和第1个数据,如果第0个大于第1个则两者交换,否则什么动作都不做,继续比较第1个第2个…,这样依次类推,直至所有数据都“冒泡”到数据顶上。
冒泡排序的的java代码:
Public void bubbleSort() { int in,out;
for(out=nElems‐1;out>0;out‐‐)   for(in=0;in<out;in++)   {
    If(a[in]>a[in+1])       Swap(in,in+1); } }

算法的不变性:许多算法中,有些条件在算法执行过程中始终是不变的。这些条件被称 为算法的不变性,如果不变性不为真了,则标记出错了; 冒泡排序的效率O(N*N),比较N*N/2,交换N*N/4;




选择排序的思想:
假设有N条数据,则暂且标记第0个数据为MIN(最小),使用OUT标记最左边未排序的数据,然后使用IN标记第1个数据,依次与MIN进行比较,如果比MIN小,则将该数据标记为MIN,当第一轮比较完后,最终的MIN与OUT标记数据交换,依次类推; 选择排序的java代码: 
Public void selectSort() {
Int in,out,min;
For(out=0;out<nElems‐1;out++) {
  Min=out;
For(in=out+1;in<nElems;in++)   If(a[in]<a[min])   Min=in; Swap(out,min); } }
选择排序的效率:O(N*N),比较N*N/2,交换<N; 选择排序与冒泡排序比较,比较次数没有明显改变,但交换次数明显减少了很多;



插入排序的思想:
插入排序是在部分数据有序的情况下,使用OUT标记第一个无序的数据,将其提取保存到一个中间变量temp中去,使用IN标记空位置,依次比较temp中的值与IN‐1的值,如果IN‐值大于temp的值,则后移,直到遇到第一个比temp小的值,在其下一个位置插入; 插入排序的java代码: Public void InsertionSort()   {
    Int in,out;
    For(out=1;out<nElems;out++)
    {
      Long temp=a[out]       In=out;
      While(in>0&& a[in‐1]>temp)       {
        A[in]=a[in‐1];         ‐ ‐in; }
A[in]=temp; } }
插入排序的效率:O(N*N), 比较N*N/4,复制N*N/4;插入排序在随机数的情况下,比冒泡快一倍,比选择稍快;在基本有序的数组中,插入排序几乎只需要O(N);在逆序情况下,并不比冒泡快

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值