>Java >java지도 시간 >Java 데이터 구조 정렬 알고리즘 (3) 단순 선택 정렬

Java 데이터 구조 정렬 알고리즘 (3) 단순 선택 정렬

零下一度
零下一度원래의
2017-05-31 09:31:531506검색

이 글은 주로 Java 데이터 구조와 알고리즘선택 정렬의 단순성을 소개하고, 선택 정렬의 원리, 구현 방법 및 관련 작업 기술을 예제 형식으로 분석합니다. 도움이 필요한 친구들이 참고할 수 있습니다

이 글은 설명합니다. 예제가 포함된 Java 데이터 단순 선택 정렬의 구조 및 알고리즘. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

이전 기사에서 이미 교환 클래스의 정렬 알고리즘에 대해 설명했습니다. 이 섹션에서는 선택 클래스의 정렬 알고리즘에 대해 이야기하기 시작합니다. .먼저 선택 정렬의 알고리즘 아이디어를 살펴보겠습니다.

선택 정렬의 기본 알고리즘 아이디어:

각 패스에서 n-i 중에서 가장 작은 키워드가 있는 레코드를 선택합니다. +1(i=1,2,3,...,n-1)은 시퀀스의 i번째 레코드로 기록됩니다.

간단한 선택 정렬:

정렬된 시퀀스의 레코드 수가 n개라고 가정합니다. i는 1,2,…,n-1을 취하여 모든 n-i+1개 레코드(Ri, Ri+1,…,Rn) 중에서 정렬 코드가 가장 작은 레코드를 찾아 i번째 레코드와 교환합니다. n-1번 실행하면 레코드 순서 정렬이 완료됩니다.

알고리즘 구현 코드는 다음과 같습니다.

package exp_sort;
public class SimpleSelectSort {
  static int i;
  static int temp;
  public static void selectSort(int array[]) {
    for (i = 0; i < array.length; i++) {
      int k = i;  //记录当前位置
      for (int j = i + 1; j < array.length; j++) {
        if (array[j] < array[k]) {   //找出最小的数,并用k指向最小数的位置
          k = j;
        }
      }
            //交换最小数array[k]与第i位上的数
      if (k != i) {
        temp = array[i];
        array[i] = array[k];
        array[k] = temp;
      }
    }
  }
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    int array[] = { 38, 62, 35, 77, 55, 14, 35, 98 };
    selectSort(array);
    for (int i = 0; i < array.length; i++) {
      System.out.print(array[i] + " ");
    }
    System.out.println("\n");
  }
}

알고리즘 분석:

이 정렬 과정에서 이동해야 하는 레코드의 개수는 상대적으로 적습니다. 가장 좋은 경우, 즉 정렬할 레코드의 초기 상태는 이미 양의 순서이므로 최악의 경우에는 레코드를 이동할 필요가 없습니다. 즉, 정렬할 레코드의 초기 상태는 다음과 같습니다. 역순으로 말하면 필요한 최대 이동 수는 3(n-1)입니다. 정렬 과정에서 필요한 비교 횟수는 초기 상태에서 정렬할 레코드 순서의 배열과 아무런 관련이 없습니다. i=1이면 n-1개의 비교가 필요하고, i=n이면 ​​필요한 총 비교 횟수는 n(n-1)/2입니다. 즉, 비교 작업의 시간 복잡도는 O( n^ 2) 이동 작업의 시간 복잡도는 O(n)입니다. 이 정렬은 불안정한 정렬입니다.

【관련 추천】

1. java 데이터 구조 정렬 알고리즘(1) 트리 선택 정렬

2. java 데이터 구조 정렬 알고리즘(2) 병합 정렬

3. Java(Selection Sort_java) 예제 튜토리얼

4.

java 데이터 구조 정렬 알고리즘(4) 선택 정렬

위 내용은 Java 데이터 구조 정렬 알고리즘 (3) 단순 선택 정렬의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.