손 으로 거품 정렬 과 정렬 선택 을 알려 드릴 게 요.
원리:
처음부터(왼쪽)부터 모든 인접 한 요 소 를 비교 하고 첫 번 째 가 두 번 째 보다 크 면 그들의 위 치 를 교환 하고 한 바퀴 를 실행 한 후에 맨 끝(맨 오른쪽)이 가장 큰 요소 이다.
예:
배열 nums={6,8,2,9,4}이 존재 한다 고 가정 하고 nums 배열 을 정렬 합 니 다.
왼쪽 에서 오른쪽으로 두 요 소 를 꺼 내 비교 하면 두 가지 상황 이 나타난다.
1.왼쪽 원소<=오른쪽 원소,불변
2.왼쪽 요소>오른쪽 요 소 를 그들의 위 치 를 교환 합 니 다(여기>=이 라 고 쓸 수 있 습 니까?안 됩 니 다.정렬 이 불안정 하기 때 문 입 니 다)
다음은 새로운 정렬 입 니 다.논 리 는 위의 그림 의 절차 와 같 습 니 다.다른 것 은 가장 큰 요 소 를 제외 하고 비교 하지 않 아 도 됩 니 다.
손 찢 기 코드:
/*
*/
public class BubbleSort1 {
//
public static int[] nums = {4,1,7,11,9,55};
//main
public static void main(String[] args){
// for ,end--,
for (int end = nums.length - 1; end > 0; end--){
for (int begin = 1; begin <= end; begin++){
if(nums[begin] < nums[begin - 1]){ //
//
int temp = nums[begin];
nums[begin] = nums[begin - 1];
nums[begin - 1] = temp;
}
}
}
//
for(int num : nums){
System.out.print(num+"_");
}
}
}
시간 복잡 도 는 4.567914.즉 n 의 제곱 이지 만 이것 은 평균 시간 복잡 도 이다.가장 좋 은 시간 복잡 도가 존재 한다
O(n^2),
바로 배열 이 원래 질서 가 있다 는 것 이다.즉,한 번 만 스 캔 하면 된다 는 것 이다.최적화 정책:
일부 질서 있 는 상황 이 존재 하기 때문에 예 를 들 어 nums 배열 은{8,5,2,10,11,12}이다.즉,10,11,12 는 비교 할 필요 가 없다.
최적화 코드:
/*
*/
public class BubbleSort1 {
public static int[] nums = {4,1,7,11,9,55};
public static void main(String[] args){
for (int end = nums.length - 1; end > 0; end--){
int sortIndex = 1; //
for (int begin = 1; begin <= end; begin++){
if(nums[begin] < nums[begin - 1]){
int temp = nums[begin - 1];
nums[begin - 1] = nums[begin];
nums[begin] = temp;
sortIndex = begin;
}
end = sortIndex;
}
}
for(int num : nums){
System.out.print(num+"_");
}
}
}
정렬 선택원리:
배열 에서 가장 큰 요 소 를 찾 은 다음 에 끝(맨 오른쪽)의 요소 와 위 치 를 교환 하고 한 바퀴 를 실행 한 후에 끝(맨 오른쪽)의 요 소 는 가장 큰 요소 입 니 다.
예:
배열 nums={5,8,1,9,3}이 존재 한다 고 가정 하고 nums 배열 을 정렬 하여 현재 최대 요 소 를 나타 내 는 아래 표 시 를 준비 합 니 다.
다음은 새로운 정렬 입 니 다.논 리 는 위의 그림 의 절차 와 같 습 니 다.다른 것 은 가장 큰 요 소 를 제외 하고 비교 하지 않 아 도 됩 니 다.
손 찢 기 코드:
/**
*
*/
public class SelectionSort {
//
private static int[] nums = {6,3,2,8,9};
//main
public static void main(String[] args){
// for ,end--,
for(int end = nums.length - 1; end > 0; end--){
int maxIndex = 0; // 0
for(int begin = 1; begin <= end; begin++){ //
if(nums[maxIndex] < nums[begin]){ //
maxIndex = begin; //
}
}
//
int temp = nums[maxIndex];
nums[maxIndex] = nums[end];
nums[end] = temp;
}
//
for(int num : nums){
System.out.print(num+"_");
}
}
}
총결산이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 글 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 거품 정렬 알고리즘 구현 및 간단한 최적화 예시거품 정렬은 아마도 모든 프로그래머가 사용할 수 있는 알고리즘이자 가장 익숙한 알고리즘 중의 하나일 것이다. 만약에 앞의 원소가 뒤의 원소보다 크다면 마지막 결과에서 전자는 반드시 뒤에 있다.그래서 우리는 이 두 원...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.