정렬 요약: 쌓 기 정렬, 빠 른 정렬, 병합 정렬, 기수 정렬
우리 가 자주 사용 하 는 간단 한 정렬 방법 (선택, 교환, 삽입) 은 쉽게 이해 하고 실현 되 지만 그들의 효율 이 높 지 않다 는 점 은 데이터 양 이 많 을 때 특히 현저 하 다.
본 고 는 더욱 효율 적 인 정렬 모델 (쌓 기 정렬, 빠 른 정렬, 병합 정렬, 기수 정렬) 의 알고리즘 과 실현 을 간략하게 소개 하고 자 합 니 다. 주로 본인 이 최근 에 배 운 정리 에 사 용 됩 니 다. 여러분 은 뿌리 지 마 세 요.
#include
#include
#include
#include
#include
int * rand_seq(int num)
{
int *tem=new int[num];
srand((unsigned)time(NULL));
for(int i=0;i(std::cout," "));
std::cout<<:endl void="" adjust_heap="" int="" i="" num="" if="" left="2*i+1;" right="2*i+2;" index="(left<num&&data[left]">data[i])?
((rightdata[left])?right:left):
((rightdata[i])?right:i);
//
if(i!=index)
{
std::swap(data[i],data[index]);
adjust_heap(data,index,num);
}
}
}
//
void build_heap(int *data, int num)
{
int tree_index=(num-1)/2;//
for(int i=tree_index;i>=0;i--)
adjust_heap(data,i,num);
}
void heap_sort(int *data, int num)
{
if(num>1)
{
build_heap(data,num);
do
{
std::swap(data[0],data[--num]);
adjust_heap(data,0,num);
}while(num>1);
}
}
int main(int argc, char** argv) {
int *data=rand_seq(20);
print(data,20);
heap_sort(data,20);
print(data,20);
delete[] data;
return 0;
}
- 快速排序
- 算法总结:在冒泡排序法中,把一个元素移动到它的正确位置,需要许多次与相邻元素交换,往往很多交换都不是必须的。作为改进,快速排序法每次找到元素的正确位置,并交换,而且采用分治策略,将数据分成两部分。更贴切第讲:每次选定一个元素,将数据分成大于和小于等于该元素的两部分,再对两部分进一步快速排序。
- 实现代码:
#include
#include
#include
#include
#include
int * rand_seq(int num)
{
int *tem=new int[num];
srand((unsigned)time(NULL));
for(int i=0;i(std::cout," "));
std::cout<<:endl void="" quick_sort="" start="" end="" if="" int="" tem="data[start];// " left="start;" right="end;" while="">tem) --right;
while(left
병합 정렬 알고리즘 요약: 우리 가 자주 사용 하 는 병합 은 실제 적 으로 반 으로 나 누 어 정렬 하 는 것 이다. 이것 은 분 치 전략 을 사용 하여 정렬 할 서열 을 모두 두 부분 으로 나 누고 한 부 씩 나 누 어 정렬 한 다음 에 정렬 할 두 서열 을 합 쳐 질서 있 는 전체 서열 을 형성한다. 실현 코드: #include
#include
#include
#include
#include
#include
int * rand_seq(int num)
{
int *tem=new int[num];
srand((unsigned)time(NULL));
for(int i=0;i(std::cout," "));
std::cout<<:endl void="" merge="" start="" mid="" end="" int="" for="" i="0;i<mid-start+1;i++)" left="" right="" j="0;" while="" if="" data="" else="" delete="" merge_sort="" main="" argc="" char="" argv="" print="" return=""/>
기수 정렬 알고리즘 요약: 기수 정렬 은 독특한 정렬 방식 으로 숫자 를 나타 내 는 방식 입 니 다. 기본 사상: 한 조 의 수 에 대해 먼저 여러분 에 게 순 서 를 매 긴 다음 에 10 자리 에 대해 순 서 를 매 깁 니 다. 백 자리...이렇게 하면 십 진법 의 수 에 대해 용기 라 고 정의 할 수 있다. 이 과정 은 각각 낮은 것 에서 높 은 것 으로 용기 에 넣 고 용 기 를 꺼 내 는 것 으로 묘사 할 수 있다. 실현 코드: #include
#include
#include
#include
#include
int * rand_seq(int num)
{
int *tem=new int[num];
srand((unsigned)time(NULL));
for(int i=0;i(std::cout," "));
std::cout<<:endl int="" pos_num="" data="" pos="" tem="1;" for="" i="1;i<pos;i++)" return="" struct="" container="" num="" void="" radix_sort="" con="" k="1;k<=2;k++)// " con_data_num="con[i].num;" j="0;j<con_data_num;j++)" main="" argc="" char="" argv="" print="" delete=""/>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JAVA] 배열 회전 출력
요소 가 출력 을 시작 하 는 위치 에 주의 하 십시오.
모두 몇 라운드 의 수출 이 있 습 니까?
n/2 + 1
매 라 운 드 는 상, 우, 하, 좌 로 나 뉜 다.
각 방향의 시작 위치 와 좌표 의 관 계 를 구...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
#include
#include
#include
#include
#include
int * rand_seq(int num)
{
int *tem=new int[num];
srand((unsigned)time(NULL));
for(int i=0;i(std::cout," "));
std::cout<<:endl void="" quick_sort="" start="" end="" if="" int="" tem="data[start];// " left="start;" right="end;" while="">tem) --right;
while(left
#include
#include
#include
#include
#include
#include
int * rand_seq(int num)
{
int *tem=new int[num];
srand((unsigned)time(NULL));
for(int i=0;i(std::cout," "));
std::cout<<:endl void="" merge="" start="" mid="" end="" int="" for="" i="0;i<mid-start+1;i++)" left="" right="" j="0;" while="" if="" data="" else="" delete="" merge_sort="" main="" argc="" char="" argv="" print="" return=""/>
#include
#include
#include
#include
#include
int * rand_seq(int num)
{
int *tem=new int[num];
srand((unsigned)time(NULL));
for(int i=0;i(std::cout," "));
std::cout<<:endl int="" pos_num="" data="" pos="" tem="1;" for="" i="1;i<pos;i++)" return="" struct="" container="" num="" void="" radix_sort="" con="" k="1;k<=2;k++)// " con_data_num="con[i].num;" j="0;j<con_data_num;j++)" main="" argc="" char="" argv="" print="" delete=""/>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JAVA] 배열 회전 출력요소 가 출력 을 시작 하 는 위치 에 주의 하 십시오. 모두 몇 라운드 의 수출 이 있 습 니까? n/2 + 1 매 라 운 드 는 상, 우, 하, 좌 로 나 뉜 다. 각 방향의 시작 위치 와 좌표 의 관 계 를 구...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.