持续更新中
冒泡排序
程序如下:
public class BubbleSort
{
public static void main(String args[])
{
int[] ages = {12,36,54,39,98,52,25,10,5,53,68,75};
bubble(ages);
for (int i = 0;i<ages.length ;i++ )
{
System.out.println(ages[i] + " ");
}
}
public static void bubble(int[] source)
{
//外层循环控制比较的次数,最多进行n-1次排序,n为元素个数
//外层循环表示第i次扫描(比较)
for (int i = source.length-1;i>0 ;i-- )
{
for (int j = 0; j<i;j++ )
{
//依次比较相邻两个元素的大小,若符合条件,则交换位置
if (source[j] > source[j+1])
{
swap(source, j, j+1);
}
}
}
}
public static void swap(int[] source, int x, int y)
{
int temp = source[x];
source[x] = source[y];
source[y] = temp;
}
}
下图表示第i次扫描时,依次比较相邻元素大小,并交换位置
选择排序
基本思想:首先扫描整个数组,找出最小元素,将其存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小元素,放到排序序列末尾。以此类推,直到所有的元素排序完毕。
程序如下:
public class SelectSort
{
public static void main(String args[])
{
int[] ages = {12,36,54,39,98,52,25,10,5,53,68,75};
selectSort(ages);
for (int i = 0;i<ages.length ;i++ )
{
System.out.println(ages[i] + " ");
}
}
public static void selectSort(int[] source)
{
for (int i = 0;i < source.length ;i++ )
{
for (int j = i+1; j<source.length;j++ )
{
//依次比较元素i与其他元素的大小,若符合要求,交换位置
if (source[i] > source[j])
{
swap(source, i, j);
}
}
}
}
public static void swap(int[] source, int x, int y)
{
int temp = source[x];
source[x] = source[y];
source[y] = temp;
}
}
插入排序
基本思想:插入排序算法是一个对少量元素进行排序的有效算法。插入排序的工作原理与打牌时整理手中的牌的做法类似,开始摸牌时,我们的左手是空的,接着一次从桌上摸起一张牌,并将它插入到左手的正确位置(当手中只有一张牌时,我们可以认为这张牌已经排序好了)。为了找到这张牌的正确位置,要将它与左手中已有的每张牌从右到左依次进行比较,然后将其插入到合适的位置,这样可以保证,每当摸起新牌时,左手中的牌都是排序好的。具体算法过程描述如下:
- 从第一个元素开始,该元素可以认为已经被排序;
- 取出下一个元素,在已排序的元素序列中从后向前扫描;
- 将新取出的元素与已有元素两两依次比较大小,直至新元素插入到合适的位置(相当于下文程序中的循环j);
- 重复步骤2(相当于下文程序中的循环i);
程序如下:
public class InsertSort
{
public static void main(String args[])
{
int[] ages = {12,36,54,39,98,52,25,10,5,53,68,75};
insertSort(ages);
for (int i = 0;i<ages.length ;i++ )
{
System.out.println(ages[i] + " ");
}
}
public static void insertSort(int[] source)
{
for (int i = 0;i < source.length ;i++ )
{
for (int j = i; (j>0)&&(source[j]<source[j-1]);j-- )
{
swap(source, j, j-1);
}
}
}
public static void swap(int[] source, int x, int y)
{
int temp = source[x];
source[x] = source[y];
source[y] = temp;
}
}