JAVA数据结构和算法(第三章)学习笔记

-------------------------------
一、冒泡排序

1、前提:
2、关键算法:

 int out, in;
for(out=nElems-1; out>1; out--){ // outer loop (backward)
for(in=0; in<out; in++) // inner loop (forward)
if( a[in] > a[in+1] ) // out of order?
swap(in, in+1); // swap them
}

3、优缺点:优点是简单,缺点是慢
  4、效率: O(N*N)

--------------------------------------
二、选择排序

1、前提:
2、关键算法:
 
   int out, in, min;
  for(out=0; out<nElems-1; out++) // outer loop
{
min = out; // minimum
for(in=out+1; in<nElems; in++) // inner loop
if(a[in] < a[min] ) { // if min greater,
min = in; // we have a new min
}
swap(out, min); // swap them
} // end for(out)
 

3、优缺点:优化了冒泡的交换操作
  4、效率: 比较操作O(N*N),交换操作约N
--------------------------------------
三、插入排序

1、前提:在数据局部是有序的情况下,使用效果好
2、关键算法:
 
    int in, out;
for(out=1; out<nElems; out++) // out is dividing line
{
long temp = a[out]; // remove marked item   取出临时变量
in = out; // start shifts at out
while(in>0 && a[in-1] >= temp) // until one is smaller, 与N-1变量比较,如果N-1大于TEMP,则N-1向后移动一步 
{
a[in] = a[in-1]; // shift item to right
--in; // go left one position  改变指针,继续向前比较
}
a[in] = temp; // insert marked item   临时变量新的位置
} // end for
 

3、优缺点:相对于冒泡优化了比较与交换
  4、效率: 最差O(N*N),最好O(N)
--------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值