C++거품 정렬 데이터 구조,알고리즘 및 개선 알고리즘
// BubbleSort.cpp : 。
//
#include "stdafx.h"
#include <cmath>
#include <iostream>
using namespace std;
#define MAXNUM 20
template<typename T>
void Swap(T& a, T& b)
{
int t = a;
a = b;
b = t;
}
template<typename T>
void Bubble(T a[], int n)
{// a[0:n-1]
for(int i =0 ;i < n-1; i++)
{
if(a[i] >a[i+1])
Swap(a[i],a[i+1]);
}
}
template<typename T>
void BubbleSort(T a[],int n)
{// a[0:n-1] n
for(int i = n;i > 1; i--)
Bubble(a,i);
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[MAXNUM];
for(int i = 0 ;i< MAXNUM; i++)
{
a[i] = rand()%(MAXNUM*5);
}
for(int i =0; i< MAXNUM; i++)
cout << a[i] << " ";
cout << endl;
BubbleSort(a,MAXNUM);
cout << "After BubbleSort: " << endl;
for(int i =0; i< MAXNUM; i++)
cout << a[i] << " ";
cin.get();
return 0;
}
그러나 일반적인 거품 은 인접 한 두 요소 가 이미 순 서 를 정 했 든 안 정 했 든 모두 거품 이 생 겨 야 한다.그러면 우 리 는 이 점 을 개선 할 필요 가 없다.제때에 종 료 된 거품 정렬 알고리즘 을 설계 합 니 다.만약 에 거품 이 발생 하 는 과정 에서 요소 교환 이 발생 하지 않 았 다 면 배열 이 순서대로 배열 되 었 고 거품 정렬 을 계속 할 필요 가 없다 는 것 을 의미한다.코드 는 다음 과 같 습 니 다:
// BubbleSort.cpp : 。
//
#include "stdafx.h"
#include <cmath>
#include <iostream>
using namespace std;
#define MAXNUM 20
template<typename T>
void Swap(T& a, T& b)
{
int t = a;
a = b;
b = t;
}
template<typename T>
bool Bubble(T a[], int n)
{// a[0:n-1]
bool swapped = false;//
for(int i =0 ;i < n-1; i++)
{
if(a[i] >a[i+1])
{
Swap(a[i],a[i+1]);
swapped = true;//
}
}
return swapped;
}
template<typename T>
void BubbleSort(T a[],int n)
{// a[0:n-1] n
for(int i = n;i > 1 && Bubble(a,i); i--);
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[MAXNUM];
for(int i = 0 ;i< MAXNUM; i++)
{
a[i] = rand()%(MAXNUM*5);
}
for(int i =0; i< MAXNUM; i++)
cout << a[i] << " ";
cout << endl;
BubbleSort(a,MAXNUM);
cout << "After BubbleSort: " << endl;
for(int i =0; i< MAXNUM; i++)
cout << a[i] << " ";
cin.get();
return 0;
}
개 선 된 알고리즘 은 최 악의 경우 실 행 된 비교 횟수 는 일반적인 거품 과 같 지만 가장 좋 은 경우 에는 n-1 로 줄어든다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 거품 정렬 알고리즘 구현 및 간단한 최적화 예시거품 정렬은 아마도 모든 프로그래머가 사용할 수 있는 알고리즘이자 가장 익숙한 알고리즘 중의 하나일 것이다. 만약에 앞의 원소가 뒤의 원소보다 크다면 마지막 결과에서 전자는 반드시 뒤에 있다.그래서 우리는 이 두 원...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.