标签:return int pArray nCount C++ 算法 冒泡 nIndex nMin
冒泡排序(Bubble Sort) 定义:它是一种计算机科学领域的较简单经典的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。 时间复杂度:最优:O(N²),最坏:O(N²),平均:O(N²)。 空间复杂度:最优:O(N²),最坏:O(N²),平均:O(N²)。 算法过程示意图: 下面是初版代码逻辑:1 #include <iostream> 2 #include <random> 3 4 5 constexpr const int ARRAY_LENGTH = 10; 6 7 int getRandomVal(int nMin, int nMax) { 8 if (nMin == nMax) { 9 return nMin; 10 } 11 12 if (nMin > nMax) { 13 return std::rand() % (nMin - nMax) + nMax; 14 } else { 15 return std::rand() % (nMax - nMin) + nMin; 16 } 17 } 18 19 bool getRandomArray(int *pArray, int nSize) { 20 if (nullptr == pArray 21 || 0 >= nSize) { 22 return false; 23 } 24 25 for (int nIndex = 0; nIndex < nSize; nIndex++) { 26 *pArray = getRandomVal(1, 50); 27 ++pArray; 28 } 29 30 return true; 31 } 32 33 bool bubbleSort(int *pArray, int nSize) { 34 if (nullptr == pArray 35 || nSize < 2) { 36 return false; 37 } 38 39 bool bSortOver = true; 40 int nSortCount = nSize - 1; 41 42 for (int nIndex = 0; nIndex < nSize; nIndex++) { 43 for (int nCount = 0; nCount < nSortCount; nCount++) { 44 if (pArray[nCount] > pArray[nCount + 1]) { 45 int nTempVal = pArray[nCount]; 46 pArray[nCount] = pArray[nCount + 1]; 47 pArray[nCount + 1] = nTempVal; 48 bSortOver = false; 49 } 50 } 51 52 if (bSortOver) { 53 break; 54 } 55 56 bSortOver = true; 57 nSortCount--; 58 } 59 60 return true; 61 } 62 63 int main() { 64 int szArray[ARRAY_LENGTH] = { 0 }; 65 66 if (!getRandomArray(szArray, ARRAY_LENGTH)) { 67 return 0; 68 } 69 70 if (!bubbleSort(szArray, ARRAY_LENGTH)) { 71 return 0; 72 } 73 74 for (int nIndex = 0; nIndex < ARRAY_LENGTH; nIndex++) { 75 std::cout << szArray[nIndex] << std::endl; 76 } 77 78 std::cin.get(); 79 80 return 0; 81 } 82
标签:return,int,pArray,nCount,C++,算法,冒泡,nIndex,nMin 来源: https://www.cnblogs.com/silentwei/p/13300766.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。