题解 | #C++冒泡排序#

C++冒泡排序

https://www.nowcoder.com/practice/eb72dada09de43ceacf93f9a143ee321

#include <iostream>
using namespace std;

int main() 
{

    int arr[6] = { 0 };
    int len = sizeof(arr) / sizeof(int);
    
    for (int i = 0; i < len; i++) 
    {
        cin >> arr[i];
    }
    
    // write your code here......
//     for (int i = 1; i < len; ++i)
//     {
//         for (int j = 0; j < len - i; ++j)
//         {
//             if (arr[j] > arr[j + 1])
//             {
//                 int tmp = arr[j];
//                 arr[j] = arr[j + 1];
//                 arr[j + 1] = tmp;
//             }
//         }
//     }
    
    // this is very interesting
//     for (int i = len - 1; i > 0; --i)
//     {
//         for (int j = 0; j < i; ++j)
//         {
//             if (arr[j] > arr[j + 1])
//             {
//                 int tmp = arr[j];
//                 arr[j] = arr[j + 1];
//                 arr[j + 1] = tmp;
//             }
//         }
//     }
//         int swapFlag = 0;
    
//         for (int i = len - 1; i > 0; --i)
// 	    {
// 		  for (int j = 0; j < i; ++j)
// 		  {
// 			if (arr[j] > arr[j + 1])
// 			{
// 				int tmp = arr[j];
// 				arr[j] = arr[j + 1];
// 				arr[j + 1] = tmp;
// 				swapFlag = 1;
// 			}
// 		  }

// 		if (!swapFlag)
// 		{
// 			break;
// 		}
// 	}
    
    int swapFlag = 0;
	int indexFinal = len - 1;
	int indexFinalTmp;
	for (int i = len - 1; i > 0; --i)
	{
		for (int j = 0; j < indexFinal; ++j)
		{
			if (arr[j] > arr[j+1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
				swapFlag = 1;
				indexFinalTmp = j;
			}
		}

		if (!swapFlag)
		{
			break;
		}
		indexFinal = indexFinalTmp;

	}
    
    for (int i = 0; i < len; ++i)
    {
       cout << arr[i] << " ";
    }
    cout << endl;
    

    return 0;
}

关于冒泡排序,其实就是相当于,每次选出一个最值,然后不断的缩小需要排序的个数(即每次减去一个,继续排剩下的)。

关于其优化,即在某一次中,如果每次都没有发生交换的话,即说明,整个都有序了,不用再继续只是缩小一个元素,继续的循环下去了,而可以直接跳出循环,完成排序。

第二点优化处,依然是在于可以缩小一下排序的范围,有的可能后面已经是有序的了,不需要继续就是了,观察一下,一次冒泡结束后的最后产生交换的位置,那个就是下次冒泡的结尾。这样可以减少一下相应的冒泡次数。
全部评论

相关推荐

02-05 08:18
四川大学 Java
在思考的熊熊很讨厌吃香菜:不是,我门头沟学院呢?这都没排上?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务