排序的思想

排序的分类

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]);
}
}
}


 

 

 

 

 

 

 

 

 

posted on 2011-10-06 21:01  缺心眼的公牛  阅读(404)  评论(0编辑  收藏  举报

导航