首页 > 代码库 > 交换排序

交换排序

1 交换排序基本思想

交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。

应用交换排序基本思想的主要排序方法有:冒泡排序(Bubble sort)和快速排序(Quick sort)。

2 冒泡排序

2.1  冒泡排序思想

第一趟排序:首先将第一个记录的关键字和第二个记录的关键字比较,若为逆序,则将两个记录交换之,然后比较第二个和第三个的关键字。以此类推,直至第n-1个记录和第n个记录关键字比较为止。该过程为第一趟排序,使得最大的关键字排到了最后面。第二趟排序:对前n-1个记录进行相同操作,完成后使得次大的关键字排在n-1位置上。以此类推,进行第三、四次排序直到排序结束。判断排序结束条件是:在一趟排序过程中没有发生过交换记录的操作。一般第i趟排序是从第1个元素到(n-i+1)个记录依次比较相邻两个记录关键字,并在逆序时交换记录。

总结便是:共比较多少趟,每趟比较多少次。一个两重循环。

2.2 冒泡排序算法实现

public static void bubbleSort(int a[])    {        int lenth = a.length;        int temp;        //共比较lenth-1轮        for (int i = 0; i < lenth - 1; i++)        {            //每轮比较length-1-j次            for (int j = 0; j < lenth - 1 - i; j++)            {                if (a[j] > a[j + 1])                {                    temp = a[j];                    a[j] = a[j + 1];                    a[j + 1] = temp;                }            }        }    }
View Code

2.3 算法效率分析

最好情况:初始序列为正序序列,只需进行一次排序,在此过程中进行n-1次比较,不移动数据。

最差情况:初始序列为逆序序列,需要进行n-1趟排序,需要进行内n(n-1)/2次比较,并且移动数据,每次比较都必须移动记录三次来达到交换记录位置。因此总的时间复杂度为O(n2)。

冒泡排序是就地排序,是稳定的。

 

交换排序