정렬 방법 을 바탕 으로 한 그룹의 중 자리수 (거품 정렬 & 정렬 선택) - 저장 대 제2 판 예 2.6
4924 단어 학습 노트
이 예 제 는 두 가지 방법 을 쓴다.사실 정렬 에 기반 한 것 이 라면 방법 에 따라 정렬 방법 이 다르다.
자신 이 생각 하 는 것 은 거품 정렬 이다.
스스로 생각 한 방법 (거품 정렬)
거품 정렬 사상
거품 정렬 은 비교적 간단 한 정렬 방법 이다. 그의 기본 적 인 사 고 는 반복 적 인 방문 에서 정렬 해 야 할 수열, 한 번 에 비교적 인접 한 두 가지 요소 이다. 만약 에 그들의 순서 가 틀 리 면 그들 을 교환 해 야 할 것 이 없 을 때 까지 전체 수열 정렬 이 완성 된다.
매번 순환 할 때마다 최대 (또는 최소) 의 요 소 는 수열 의 맨 끝 에 도착 하기 때문에 거품 정렬 이 라 고 합 니 다.
기본 운영 방식
여 기 는 매번 가장 큰 요 소 를 골 라 내 는 것 을 예 로 들 면:
1. 비교적 인접 한 원소.첫 번 째 대 두 번 째 대답 은 그들 과 교환 하 라.
2. 모든 인접 한 요소 에 대해 똑 같은 일 을 하고 첫 번 째 쌍 부터 끝 난 마지막 쌍 까지 한다.(이 점 에서 마지막 요 소 는 가장 큰 숫자 일 것 이다)
3. 모든 요소 가 상기 절 차 를 반복 하 는 것 은 매번 순환 에 참여 하 는 마지막 을 제외 하고 (예 를 들 어 첫 번 째 순환 은 마지막 요 소 를 비교 마감 점 으로 하고 두 번 째 순환 은 마지막 두 번 째 요 소 를 비교 마감 점 으로 하 는 것 이다. 첫 번 째 순환 이 결 속 된 후에 마지막 요 소 는 질서 가 있 기 때문이다).
4. 매번 점점 적어 지 는 등 속 에 대해 위의 절 차 를 반복 하고 그 어떠한 숫자 도 비교 할 필요 가 없다 는 것 을 알 게 된다.
코드 구현
여 기 는 거품 을 일 으 키 고 순 서 를 매 긴 후에 중위 수 를 찾 는 방법 만 말 합 니 다. 초등학교 교과서 지식 입 니 다. (왜 그렇게 잘 기억 하 는 지 묻 지 마 세 요. 제 여동생 이 초등 학 교 를 막 졸 업 했 는데 이렇게 어린 그녀 는 모레 외지 에 가서 공부 해 야 합 니 다. 저 는... 울 었 습 니 다)
int* bubble_sort(int a[], int n){
//sorting
int i,j,tmp;
for( j = 0; j < n-1; j++){
for( i = 0 ;i < n-j-1; i++){
if(a[i] > a[i+1]){
tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
}
}
}
return a;
}
두 순환 변수 에 대한 이 해 는 비교적 관건 적 인 부분 이다.
우선 순환 변수 j.j 는 두 가지 역할 을 하 는데 하 나 는 순환 횟수 를 제어 하 는 것 이 고 하 나 는 매번 순환 하 는 위 치 를 제어 하 는 것 이다.제어 순환 횟수 는 j < n - 1 에 나타 나 는데 왜 n - 1 회 만 순환 해 야 합 니까?n - 1 이 끝 난 후에 첫 번 째 요소 뒤에 남 은 n - 1 개의 요소 가 질서 가 있 기 때문에 마지막 n 의 요소 가 있 는 것 이 바로 그의 정확 한 순서 위치 이다.매번 순환 하 는 위 치 를 제어 하 는 것 은 i < n - j - 1 곳 에 나타난다. 이곳 의 원인 은 순환 변수 i 의 역할 과 관련 되 어야 한다. 사실은 i 와 j 가 매번 순환 하 는 위 치 를 공동으로 제어 하 는 것 이다.
다음은 순환 변수 i 와 j 가 매번 순환 하 는 위 치 를 어떻게 같이 제어 하 는 지 알려 드 리 겠 습 니 다. i < n - j - 1 에 나타 납 니 다.예 를 들 어 다섯 개의 요소 가 있 는데 첫 번 째 순환 은 두 번, 두 번 째 순환 은 세 번 비교 해 야 한다. 이런 식 으로 유추 하면 이 i < n - j - 1 의 판정 식 을 얻 을 수 있다.(한 번 순환 할 때마다 한 번 적 게 비교 해 야 한다)
자, 이 방법 은 끝 났 습 니 다.
책 에서 제공 한 해답
책 에서 제공 하 는 해답 은 정렬 을 선택 하 는 것 이다.
정렬 사상 선택
기 록 된 파일 의 직접 선택 정렬
n - 1 번 을 거 쳐 정렬 을 직접 선택 하여 질서 있 는 결 과 를 얻 을 수 있 습 니 다.(이 말 이 아주 세련 된 것 같 아 요)
위의 이 말 은 한 서열 에 n 과 요소 가 있 고 매번 에 무질서 한 서열 에 대해 직접 순 서 를 선택 하 는 것 이다. 즉, 매번 이 무질서 한 서열 에서 가장 큰 (또는 가장 작은) 요 소 를 선택 하고 이 서열 의 맨 앞 에 놓 는 것 이다 (물론 맨 뒤에 도 가능 하 다. 모두 통일 적 으로 이렇게 하면 된다). n - 1 번 의 선택 을 거 쳐그러면 이 요소 의 개수 가 n 인 서열 은 질서 가 있 습 니 다.
무엇이 무질서 한 서열 입 니까?n 개의 요소 가 첫 번 째 정렬 전에 무질서 한 서열 은 바로 이 n 개의 요소 로 구 성 된 서열 이다.첫 번 째 정렬 이 끝 난 후에 예 를 들 어 이번 정렬 은 n 개의 요소 중에서 가장 작은 요 소 를 서열 의 첫 번 째 위치 에 두 었 다. 그러면 그 뒤의 n - 1 요 소 는 무질서 한 서열 이 고 첫 번 째 위치의 요 소 는 질서 있 는 서열 이다.
기본 운영 방법
이 순환 은 이 순환 에서 가장 큰 요 소 를 정렬 대기 서열 의 첫 번 째 예 로 들 수 있다 고 생각 합 니 다.
1. 배열 서열 에서 가장 큰 요 소 를 찾 아 배열 대기 서열 의 첫 번 째 요소 와 교환 합 니 다.
2. 1 을 계속 반복 하여 대기 배열 의 순서 가 점점 짧 아 지고 대기 배열 이 하나의 요소 만 남 았 을 때 정렬 이 완 료 됩 니 다.
코드 구현
코드 구현 에 세 개의 코드 가 붙 어 있 습 니 다. 자세 한 내용 은 다음 을 보십시오.
code segment 1:
int* select_sort(int a[], int n){
int i,j,tmp,max=a[n-1];
for( i = 0; i < n-1; i++){
for( j = 0; j < n-i-1; j++){
if(a[j] > max){
tmp = a[j];
a[j] = max;
max = tmp;
}
}
}
return a;
}
이것 은 내 가 책 에서 묘사 한 선택 정렬 사상 에 따라 쓴 코드 로 너 를 웃 게 할 수도 있다.................................................................그런데 맥 스 는 뭐 예요?그것 은 단지 a [n - 1] 의 사본 일 뿐 입 니 다. max 를 가지 고 a [j] 와 위 치 를 교환 하면 a [n - 1] 가 반응 할 수 있 습 니까?
code segment 2:
int* select_sort(int a[], int n){
int i,j,tmp;
for( i = 0; i < n-1; i++){
for( j = 0; j < n-i-1; j++){
if(a[j] > a[n-i-1]){
tmp = a[j];
a[j] = a[n-i-1];
a[n-i-1] = tmp;
}
}
}
return a;
}
코드 1 의 문 제 를 의식 한 후에 2 라 는 해결 조 치 를 생각 했 습 니 다. 바로 바 꾸 면 됩 니 다. 이 코드 는 정렬 문 제 를 해결 할 수 있 습 니 다.
code segement 3:
int* select_sort_on_book(int a[], int n){
int i,j,MaxPosition,tmp;
for( i = 0 ; i < n-1 ; i++){
MaxPosition = i;
for( j = i+1 ; j < n ; j++){
if( a[j] > a[MaxPosition] ){
MaxPosition = j;
}
}
//
tmp = a[MaxPosition];
a[MaxPosition] = a[i];
a[i] = tmp;
}
return a;
}
이것 은 책 에서 제공 한 코드 로 즉시 위 치 를 교환 하지 않 고 가장 큰 요소 가 있 는 위 치 를 기록 한 다음 에 교환 하면 교환 횟수 를 줄 이 고 교환 효율 을 높 일 수 있다.그리고 그의 사상 은 위 에서 말 한 것 과 완전히 부합 되 고 매번 대기 서열 이 가장 큰 요 소 를 대기 서열 의 첫 번 째 위치 에 놓는다.
여기 서 나 는 왜 두 번 째 순환 의 시작 은 j = i + 1 이지 j = i 가 아 닙 니까?프로그램 은 대기 서열 의 a [i] 를 이 서열 의 최대 값 으로 생각 하기 때문에 그 자체 와 비교 하지 않 아 도 되 기 때문에 비교 횟수 를 줄 였 다.
이 방법 은 여기 서 마 치 겠 습 니 다.
공부 하 는 김 에 배 운 지식.
어떻게 배열 의 길 이 를 얻 습 니까?
두 가지 상황 으로 나 뉜 다. 1. 문자 배열: strlen () 함수 로 하면 됩 니 다. 함수 원형: unsigned int strlen (char * s) 은 함수 원형 을 보면 문자 배열 에 만 사용 할 수 있다 는 것 을 알 수 있 습 니 다. 헤더 파일 string. h 를 포함 하 는 것 을 기억 하 세 요.
2. 성형 배열: int lenth = sizeof (a) / sizeof (a [0]), 그 중 a 책 배열 이름 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
STL 학습노트(6) 함수 객체모방 함수는 모두pass-by-value이다 함수 대상은 값에 따라 전달되고 값에 따라 되돌아오기 때문에 함수 대상은 가능한 한 작아야 한다(대상 복사 비용이 크다) 함수 f와 대상 x, x 대상에서 f를 호출하면:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.