最近在补习数据结构方面的内容,作为一个计算机专业人士,我们还是很有必要把数据结构学习好,特别是当自己很迷茫时,都不知道自己的提升空间在哪里,总是止步不前。还有就是作为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);
}
}
}
一:项目管理
二:高级程序员
三:系统架构师
对于刚毕业不久的我来讲,而显然我自己是向第二个方向发展,而在这个方向上就需要将自己的编码、设计、分析等综合提高。我之所以将编码方法第一个,主要是变成才是我们的主要工作。
好了,话就不多说了!还是进入正题吧!由于最近工作非常忙,我利用晚上的时间开始学习了排序算法,虽然坛子了高手如云,我还是要把这些给列出来,毕竟这是我自己的理解编写的几个算法,同时尽可能多的多重角度去,开阔自己的思维,这里我只是列出主要代码:
一:冒泡算法(参数是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);
}
}
}