JAVA 数据结构之排序算法(一)

最近在补习数据结构方面的内容,作为一个计算机专业人士,我们还是很有必要把数据结构学习好,特别是当自己很迷茫时,都不知道自己的提升空间在哪里,总是止步不前。还有就是作为web开发人员,感觉自己老是在html/css/js/ajax/struts等等徘徊时,做来做去总是这些重复性的东西。这个时候我们要提升自己的话,可以从多个方面去探讨。
一:项目管理
二:高级程序员
三:系统架构师

对于刚毕业不久的我来讲,而显然我自己是向第二个方向发展,而在这个方向上就需要将自己的编码、设计、分析等综合提高。我之所以将编码方法第一个,主要是变成才是我们的主要工作。

好了,话就不多说了!还是进入正题吧!由于最近工作非常忙,我利用晚上的时间开始学习了排序算法,虽然坛子了高手如云,我还是要把这些给列出来,毕竟这是我自己的理解编写的几个算法,同时尽可能多的多重角度去,开阔自己的思维,这里我只是列出主要代码:

一:冒泡算法(参数是List)

//方法一:从前向后排序,即最后一个最大或最小
/*
for(int i=0; i<data.size(); i++)
{
for(int j = 0; j < data.size()-1-i; j++)
{
if(data.get(j) > data.get(j+1))
{
int temp;
temp = data.get(j);
data.set(j, data.get(j+1));
data.set(j+1, temp);
}
}
}
*/

//方法二:从后向前排序,即最前一个最大或最小
for(int i = 0; i < data.size(); i++)
{
for(int j = i; j < data.size() ; j++)
{
if(data.get(i) < data.get(j))
{
int temp;
temp = data.get(i);
data.set(i, data.get(j));
data.set(j, temp);
}
}
}

二:选择算法(参数是List)

public static void select(List<Integer> data)
{
int min = 0;
for(int i = 0; i < data.size(); i++)
{
min = getMinIndex(i,data.size(),data);
swap(min,i,data);
}
}

//获得每次遍历最小值索引
public static int getMinIndex(int first,int last,List<Integer> data)
{
int min = first;

for(int j = first + 1; j < last ; j++)
{
if(data.get(j) < data.get(min))
{
min = j;
}
}

return min;
}

//交换位置
public static void swap(int min,int first,List<Integer> data)
{
int temp;

temp = data.get(first);
data.set(first, data.get(min));
data.set(min, temp);
}

三:插入算法(参数是List)

public static void insert(List<Integer> data)
{
int temp = 0;

//用于保存当前位置的前一个位置
int loc = 0;

//默认第一个已经排好序
for(int i = 1; i < data.size(); i++)
{
//即当前位置值小于当前位置的前一个位置的值,则开始交换操作,一直遍历至完成
/*
if(data.get(i) < data.get(i-1))
{
temp = data.get(i);
loc = i;

// 方法一
do
{
data.set(loc,data.get(loc-1));
data.set(loc-1, temp);
loc--;
}
while((loc > 0) && (data.get(loc - 1) > temp));
}
*/

//方法二

temp = data.get(i);

for(int j = i; (j > 0) && (data.get(j-1) > temp); j--,i--)
{
data.set(i,data.get(j-1));
data.set(j-1, temp);
}

}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值