排序的思想
排序的分类
1.内部排序
指将需要处理的所有数据都加载到内部寄存器中进行排序
包括: 交换式排序法, 选择式排序法, 插入式排序
2.外部排序法
数据量过大, 无法全部加载到内存中, 需要借助外部存储进行排序
包括: 合并排序法, 直接合并排序法
排序(sorting)是数据处理中一种很主要的运算, 同时也是很常用的运算, 一般数据处理工作25%的时间都在进行排序
简单的说, 排序就是把一组记录(元素)按照某个域的值的递增(即由小到大)或递减(即由大到小)的次序重新排列的过程.
交换式排序法又可分为2种:
冒泡排序 bubble sort
快速排序 quick sort
1.冒泡排序法:
1). 将给定的一组数字按照顺序排列.
程序清单如下:
public class ArrayTest
{
public static void main(String[] args)
{
int a[] = {1,2 , 34, 12, 234, 435};
for (int i = 0; i < a.length; i++)
{
for (int j = i + 1; j < a.length; j++)
{
if (a[i] > a[j])
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
//System.out.println(a[i]);
}
System.out.println(a[i]);
}
}
}
2). 在输出时, 手动输入一组数据, 要求程序按照顺序输出.
程序清单如下:
public class ArrayTest
{
public static void main(String[] args)
{
int [] a = new int[args.length];
for (int i = 0; i < args.length; i++)
{
a[i] = Integer.parseInt(args[i]);
// 把每个数组类型的变量都转换成int类型
}
print(a);
System.out.println();
selectionSort(a);
print(a);
}
// 使用方法
public static void selectionSort(int[] args)
{
for (int i = 0; i < args.length; i++)
{
for (int j = i+1; j < args.length; j++ )
{
if (args[i] > args[j])
{
int temp = args[i];
args[i] = args[j];
args[j] = temp;
}
}
//System.out.print(args[i] + " ");
}
}
private static void print(int[] a)
{
for (int i = 0; i < a.length; i++)
{
System.out.print(a[i] + " ");
}
}
}
3). 冒泡排序的优化, 清单如下:
public class ArrayTest1
{
public static void main(String[] args)
{
int [] a = new int[args.length];
for (int i = 0; i < args.length; i++)
{
// 把每个数组类型的变量都转换成int类型
a[i] = Integer.parseInt(args[i]);
}
print(a);
System.out.println();
selectionSort(a);
print(a);
}
public static void selectionSort(int[] a)
{
for (int i = 0; i < a.length; i++)
{
int k = i;
for (int j = k+1; j <a.length; j++)
{
if (a[k] > a[j])
{
k = j;
}
int temp = a[k];
a[k] = a[i];
a[i] = temp;
}
}
}
private static void print(int[] a)
{
for (int i = 0; i < a.length; i++)
{
System.out.print(a[i] + " ");
}
}
}
韩顺平视频上讲授的排序思想
public class ArrayTest2
{
public static void main(String[] args)
{
int arr[] = {1, 4, 0, -1, 23, 53};
int temp = 0;
//排序
// 外层循环, 它决定一共走几趟
for (int i = 0; i < arr.length - 1; i++)
{
//内层循环, 开始逐个比较, 如果发行前一个数比后一个数大, 则交换位置.
for (int j = 0 ; j < arr.length - 1 - i; j ++)
{
if (arr[j] > arr[j+1] )
{
// 交换位置
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for (int i = 0; i < arr.length; i ++)
{
System.out.print(arr[i] + " ");
}
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------
public class ArrayTest
{
public static void main(String[] args)
{
int a[] = {1,2 , 34, 12, 234, 435};
for (int i = 0; i < a.length; i++)
{
for (int j = i + 1; j < a.length; j++)
{
if (a[i] > a[j])
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
//System.out.println(a[i]);
}
System.out.println(a[i]);
}
}
}