在程序设计中,经常需要将一组数据序列进行排序,这样更加方便统计和查询。程序中常见的排序方法有冒泡排序、选择排序和快速排序等。
1、冒泡排序
基本思想:对比相邻元素的值,如果满足条件就交换,把较小的元素移动到数组的前面,较大的元素值移动到数组的后面,也就是交换两个元素的位置,这样较小的元素就像气泡一样从底部上升到顶部。
图片来源:百度百科
public class BubbleSort {
public static void main(String args[])
{
// 创建arry数组,并在其中赋值一些具体的数以待排序使用
int array[] = {64,4,24,1,3,15};
// 创建冒泡排序类的对象
BubbleSort sorter = new BubbleSort();
// 调用冒泡排序的方法进行排序
sorter.sort(array);
}
// 排序方法
public void sort(int array[])
{
for(int i = 1;i < array.length;i++)
{
for(int j = 0;j < array.length - i;j++)
{
if(array[j] > array[j+1])
{
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
showArray(array);
}
// 输出方法
public void showArray(int[] array)
{
for(int i:array)
{
System.out.print(i + " ");
}
}
}
如果要实现倒排序,在代码块中只需要将 if(array[j] > array[j+1]) 的“>”改为“<”即可
2、直接排序
基本思想:将指定排序位置的值和数组其他位置的元素值进行对比,如果满足条件就交换元素值。注意这里与冒泡排序的区别,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换,如从最后一个元素开始排序。这样排序好的位置逐渐扩大,这样整个数组都成为已经排序好的格式。
public class SelectSort
{
public static void main(String args[])
{
// 定义一个数组并赋值一些数据以待后续排序使用
int array[] = {63,4,24,1,3,15};
// 创造直接排序类的对象
SelectSort sorter = new SelectSort();
// 调用排序对象的方法将数组进行排序
sorter.sort(array);
}
// 直接选择排序具体实现方法步骤
public void sort(int array[])
{
int index; // 用来存放索引值
for(int i = 1;i < array.length;i++)
{
index = 0;
for(int j = 1;j <= array.length - i;j++) // 找到最大值的索引
{
if(array[j] > array[index])
{
index = j; // 得到最大那个数的索引值
}
}
// 交换
int temp = array[array.length - i]; // 从后往前排,每轮均找到最后待排序的位置
array[array.length - i] = array[index];
array[index] = temp;
}
// 打印输出
showArray(array);
}
public void showArray(int[] array)
{
for(int i:array)
{
System.out.print(i + " ");
}
}
}
如果要实现倒排序,在代码块中只需要将 if(array[j] > array[index]) 的“>”改为“<”即可
3、反转排序
基本思想:把数组的最后一个元素与第一个元素进行交换,第二个元素与倒数第二个元素进行交换,其他的元素以此类推,直到所有元素完成反转排序。
public class ReverseSort
{
public static void main(String args[])
{
// 创建一个数组以待后续进行排序使用
int array[] = {10,20,30,40,50,60};
// 创建反转排序类的对象
ReverseSort sorter = new ReverseSort();
// 调用排序对象的方法,将数组反转
sorter.sort(array);
}
// 反转排序的具体方法
public void sort(int array[])
{
// 打印输出反转排序前的输出结果
System.out.println("反转排序前的输出结果为:");
showArray(array);
// 实现步骤
int temp;
for(int i = 0;i < array.length/2;i++)
{
temp = array[i];
array[i] = array[array.length - 1 - i]; // 对称的两个值进行互换
array[array.length -1 - i] = temp;
}
// 打印输出排序后的结果
System.out.println("\n反转排序后的输出结果为:");
showArray(array);
}
public void showArray(int[] array)
{
for(int i:array)
{
System.out.print(i + " ");
}
}
}