1.基本概念
根据在排序过程中待排序的记录是否全部被放置在内存中,将排序分为内部排序和外部排序。内部排序是在排序整个过程中,待排序的所有记录全部 放置在内存中;外排序是由于排序的记录个数太多,不能同时放置在内存中,整个排序过程需要 在内外存之间多次交换数据才能进行。
2.八大排序
下面讲述的八大排序,都是属于内部排序。具体如下图
3.冒泡排序
首先来讲讲冒泡排序(Bubble Sort),这是思路最简单的排序方式。他的基本思想是:重复地走访要排序的数列,一次比较2相邻的元素,如果它们的顺序错误就把它们交换过来,直到没有再需要交换的,这样越大的元素经由交换会慢慢“浮出”。(这里的排序一般都是从小到大的进行排序)
初: 49 38 65 97 76 13 27 49
1st: 38 49 65 76 13 27 49 97
2nd: 38 49 65 13 27 49 76 97
3rd: 38 49 13 27 49 65 76 97
4th: 38 13 27 49 49 65 76 97
5th: 13 27 38 49 49 65 76 97
每走访一次数列,都会有一个相对最大的元素浮出。
4.时间复杂度
(1)最好的情况,即待排序的数列初状态为正序,则一起泡就可以完成排序,则进行了n-1次比较,没有数据交换,时间复杂度为O(n)
(2)最坏的情况,即待排序的数列初状态为逆序,此时需要比较n(n-1)/2次,并做等数量的数据交换,因此总的之间复杂度为O(n^2)。
冒泡排序是一种稳定的排序方法。
5.java代码的实现
public class bubble {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] a = {57,68,59,52,72,28,96,33,24,19};
//int []a = {57,68,59,52};
System.out.println("冒泡排序的结果是: ");
bubbleSort(a);
printscreen(a);
}
private static void printscreen(int[] number) {
// TODO Auto-generated method stub
int size = number.length;
for (int i = 0 ; i < size;i++)
System.out.print(number[i]+ " ");
System.out.println();
}
//冒泡排序
/**
*
* @author Administrator
*冒泡排序
*比较相邻的元素,如果第一个比第二个大,就交换他们两个
*对每一对相邻的元素做相同的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的
*针对素有的元素重复以上步骤,除了最后一个
*持续每次对越来越少的元素重复上面的操作,直到没有一个数字需要比较
*/
public static void bubbleSort(int [] number)
{ //nuberm.lengthnuberm.length放在外面,较少调用函数的次数,提高效率?
int size = number.length;
for(int i = 0;i < size -1;i++ )//每次比较最大的到了最后,下一次不用再参与比较
{
for(int j = 0;j < size - 1 - i;j++)//下面有j+1,所以上限要-1
{
if (number[j] > number[j+1])
{
int n = number[j];
number[j] = number[j+1];
number[j+1] = n;
}
}
}
}
}