【声明:全新原创,欢迎转载,如果发现文章错误或者有好的意见与建议希望指点下~!】
进入主题,本次文章的主要算法是冒泡排序与选择排序。
冒泡排序(bubble sort):顾名思义,就是把大的数想气泡一样一个个排到最顶端。
算法思想:从数组的第一个数开始(设数组一共有n个数据):
1.从第一个数开始,将第一个数与第二个数比较,如果第一个数大于第二个数,那么交换第一个数与第二个数,如果第二个数大于第一个数,则不变。然后比较第二个与第三个,一次类推,直到比较完第n-1个和第n个,一直需要比较n-1次。(注:第一趟结束后最后一个数为最大的数,第二趟结束后倒数第二个为第二大的数)
2.第一趟完成后将重复上面的步骤,直到没有任何一个数需要比较。
例如:无序数列:11,22,4,5,38,9,14,56,78,49
第一趟:11,4,5,22,9,14,38,56,49,78
第二趟:4,5,11,9,14,22,38,49,56,78
。。。。。。
直到最后一趟排出有序数列。
冒泡排序的时间复杂度分析:
很明显:对于冒泡排序来说,最好的情况是顺序,此时只需要比较n-1次,时间复杂度是O(n);
最差的情况是逆序,此时需要比较n-1趟,每趟需要比较n-i个数,所以最坏的时间复杂度为O(n²)。
综上所诉,冒泡排序的时间复杂度为O(n²)。
注:冒泡排序是一种稳定的算法。
下面给出冒泡排序的JAVA实现:
class bubbleSort
{
int temp = 0;//临时变量
public void sort(int []arr)
{
for(int i=0;i<arr.length-1;i++)//最多做n-1趟排序
{
for(int j=0;j<arr.length-1-i;j++)//每一次都是比较两个数
//然后把较大的数据换到后