Java Java인터뷰 질문들 메이투안 인터뷰: 빠른 일정을 손으로 써주세요. 깜짝 놀랐습니다!

메이투안 인터뷰: 빠른 일정을 손으로 써주세요. 깜짝 놀랐습니다!

Aug 24, 2023 pm 03:20 PM
자바 면접 질문

오늘 면접관님이 즉석에서 퀵소트를 작성해 달라고 하셨습니다. 현장은 다음과 같습니다.

인터뷰어: 계속해서 데이터 구조와 알고리즘에 대해 이야기해 주실 수 있나요? (말하면서 이력서를 넘기더니 펜을 건넸다. 이력서 뒷면에 써달라는 뜻이었다.)

루키나: 무슨 말이야? 여기에 쓰시겠어요? (이력서를 가리키며)

면접관: 응

신입 나: 아니

면접관: 자, 오늘 면접은 여기까지

신입 나: (너무 화가 나요. 노사에 고발하고 싶어요. 코드를 재개하시겠습니까? 그냥 쓰세요, 어차피 종이 한 장일 뿐입니다.

사실 퀵큐는 쉽지만 손으로 ​​못쓰는 분들도 많을 것 같은데요, 여러모로 그 자리에서 손으로 쓰는 분들도 많죠?

초보인데 아직 손으로 쓸 수 있거든요. 결국 인터뷰 전에는 일부러 "메이투안 인터뷰: 빠른 일정을 손으로 써주세요. 깜짝 놀랐습니다!빠른 받아쓰기

"를 준비했어요.

이제 분석하고 분석해 봅시다 ---- 퀵 정렬.

Background

백과사전에서:

빠른 정렬은 1962년 C. A. R. Hoare에 의해 제안되었습니다. 기본 아이디어는 한 번의 정렬을 통해 정렬할 데이터를 두 개의 독립적인 부분으로 나눈 다음, 이 방법을 사용하여 데이터의 두 부분을 빠르게 분리하는 것입니다. . 정렬은 전체 정렬 프로세스를 [재귀적으로] 수행하여 전체 데이터가 정렬된 시퀀스가 ​​되도록 할 수 있습니다.

이 개념을 이해하는 것은 꽤 어렵습니다.

다음과 같이 이해될 수 있습니다.

퀵 정렬은 버블 정렬의 향상된 버전입니다. 전체 프로세스는 항목을 제거하고 패치하고, 찢고, 패치하고, 찢고 패치하는 것입니다. 모든 요소는 정렬된 상태에 도달합니다.

핵심 아이디어:

먼저 시퀀스에서 숫자를 기본 숫자로 가져온 다음 크기 분할을 수행합니다.

파티션 프로세스에서 이 숫자보다 큰 숫자는 모두 오른쪽에 배치되고, 그보다 작은 숫자는 오른쪽에 배치됩니다. 또는 그와 같으면 모두 왼쪽에 놓습니다.

각 간격에 하나의 숫자만 있을 때까지 왼쪽 및 오른쪽 간격에 대해 두 번째 단계를 반복하고 정렬이 완료됩니다.

구현사례

사진과 글을 통해 차근차근 분해해보겠습니다.

이 배열을 [4,1,6,2,9,3]예로 들어보세요.

첫 번째 패스:

  • 먼저 [4,1,6,2,9,3]을 분할하고 요소 4를 피벗점으로 선택합니다
  • 1 < 4(피벗점)인지 확인하세요
  • 6 < 4인지 확인하세요. (피벗 포인트)
  • 2 < 4(피벗 포인트)인지 확인하세요.
  • 2 < 4(피벗 포인트)가 true인지 확인하세요. 인덱스 2를 저장된 인덱스 6으로 바꾸세요.
  • (피벗 포인트)
  • 3 < 4(피벗 포인트)인지 확인
  • 3 < 4(피벗 포인트)인 경우 인덱스 3과 6을 저장합니다.
  • 피벗 포인트 4를 교환하고 저장합니다. index 3
  • 이때 피벗점 4의 왼쪽은 모두 4보다 작고, 오른쪽은 4보다 큽니다

메이투안 인터뷰: 빠른 일정을 손으로 써주세요. 깜짝 놀랐습니다!

현재 배열 순서는 [3, 1, 2, 4, 9, 6].

다음 단계:

  • 먼저 왼쪽을 정렬하세요
  • 요소 3을 피벗점으로 선택하세요
  • 1 < 3(피벗점)인지 확인하세요
  • 2 < ; (피벗 포인트)
  • 피벗 포인트 3과 저장 인덱스 값 2를 교환
  • 이제 피벗 포인트가 정렬된 위치에서 분할되었습니다
  • [2,1] 2를 피벗 포인트로 선택
  • 1<2(피벗 포인트)인지 확인
  • 왼쪽의 순회가 완료되고 피벗 포인트 2와 저장 인덱스 1이 교환됩니다

오른쪽도 마찬가지입니다... 시각적인 것은 피하세요 피로도를 하나씩 설명하지는 않겠지만 아래 동적 시연 사진을 보시면 됩니다.

메이투안 인터뷰: 빠른 일정을 손으로 써주세요. 깜짝 놀랐습니다!

2. 빠른 정렬 방법의 전체 프로세스

메이투안 인터뷰: 빠른 일정을 손으로 써주세요. 깜짝 놀랐습니다!

3. 아래에서는 Java 언어를 사용하여 이전 빠른 정렬 사례를 구현합니다.
import java.util.Arrays;

public class QuickSortDemo {
    //四个步骤:
    //1.比较startIndex和endIndex,更喜欢理解为校验
    //2.找出基准
    //3.左边部分排序
    //4.右边排序
    public static void quickSort(int[] arr, int startIndex, int endIndex) {
        if (startIndex < endIndex) {
            //找出基准
            int partition = partition(arr, startIndex, endIndex);
            //分成两边递归进行
            quickSort(arr, startIndex, partition - 1);
            quickSort(arr, partition + 1, endIndex);
        }
    }

    //找基准
    private static int partition(int[] arr, int startIndex, int endIndex) {
        int pivot = arr[startIndex];
        
        int left = startIndex;
        int right = endIndex;
        
        //等于就没有必要排序
        while (left != right) {
            
            while (left < right && arr[right] > pivot) {
                right--;
            }
          
            while (left < right && arr[left] <= pivot) {
                left++;
            }
            //找到left比基准大,right比基准小,进行交换
            if (left < right) {
                swap(arr, left, right);
            }
        }
        //第一轮完成,让left和right重合的位置和基准交换,返回基准的位置
        swap(arr, startIndex, left);
        return left;
    }

    //两数交换
    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static void main(String[] args) {
        int[] a = {3, 1, 2, 4, 9, 6};
        quickSort(a, 0, a.length - 1);
        //输出结果
        System.out.println(Arrays.toString(a));
    }
}
로그인 후 복사
출력 결과:

[1, 2, 3, 4, 6, 9]
로그인 후 복사

코드 구현, 이해하기 쉽도록 이전 애니메이션과 결합하는 것이 좋습니다.

퀵 정렬을 작성하는 방법에는 여러 가지가 있습니다. 관심이 있으시면 Wikipedia에서 퀵 정렬이 어떻게 소개되는지 직접 찾아보실 수도 있습니다.

4. 복잡도 분석

시간 복잡도:

최악의 시나리오는 매번 검색되는 요소가 배열에서 가장 작거나 가장 큰 요소라는 것입니다. 한 요소씩 순서대로 정렬)

이 경우 시간 복잡도는 쉽게 계산할 수 있는데, 이는 버블 정렬의 시간 복잡도입니다. T[n] = n * (n-1) = n^2 + n ;

가장 좋은 경우는 O(nlog2n)이며, 도출 과정은 다음과 같습니다:

(재귀 알고리즘의 시간 복잡도 공식: T[n] = aT[n/b] + f(n) )

https://img2018.cnblogs.com/blog/1258817/201903/1258817-20190326191158640-601403776.png

그래서 평균 시간 복잡도는 O(nlog2n)

공간 복잡성:

공간 퀵 정렬에서 사용하는 것은 상수 수준인 O(1)이며 실제로 공간을 소비하는 것은 재귀 호출입니다. 각 재귀는 일부 데이터를 유지해야 하기 때문입니다.

최적의 경우 공간 복잡성은 다음과 같습니다. O(log2n ); 그룹이 매번 동일하게 분할되는 경우

최악의 공간 복잡도는 O(n) 버블 정렬의 경우로 변질됩니다

그러므로 평균 공간 복잡도는 O(log2n)

5. 빠른 정렬 방법 요약

  • 기본적으로 첫 번째 요소가 피벗점으로 사용됩니다. (피벗점 확인으로 "빠른 정렬 방법"과 "임의 정렬 방법"이 구분됩니다.) 두 가지 알고리즘, 무작위 정렬은 요소를 피벗 포인트로 무작위로 지정합니다.
  • 인접하지 않은 두 요소가 교환되면 한 번의 교환으로 여러 역순이 제거되어 정렬 프로세스가 빨라집니다.

Postscript

마지막으로 퀵 정렬이 업무에 유용하다고 생각하시나요? 10년 가까이 일하면서 한 번도 사용해 본 적이 없지만 퀵큐에 대한 아이디어는 알고 있습니다. 인터뷰 전에 준비하지 않으면 어차피 글을 쓸 수 없을 것 같아요.

위 내용은 메이투안 인터뷰: 빠른 일정을 손으로 써주세요. 깜짝 놀랐습니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

인터뷰어: Spring Aop 공통 주석 및 실행 순서 인터뷰어: Spring Aop 공통 주석 및 실행 순서 Aug 15, 2023 pm 04:32 PM

Spring을 알아야 하므로 Aop의 모든 알림 순서에 대해 이야기해 보겠습니다. Spring Boot 또는 Spring Boot 2는 Aop의 실행 순서에 어떤 영향을 줍니까? AOP에서 직면한 함정에 대해 알려주십시오.

특정 그룹과의 인터뷰: 온라인에서 OOM을 발견하면 어떻게 문제를 해결해야 합니까? 어떻게 해결하나요? 어떤 옵션이 있나요? 특정 그룹과의 인터뷰: 온라인에서 OOM을 발견하면 어떻게 문제를 해결해야 합니까? 어떻게 해결하나요? 어떤 옵션이 있나요? Aug 23, 2023 pm 02:34 PM

OOM은 코드나 JVM 매개변수 구성으로 인해 프로그램에 취약점이 있음을 의미합니다. 이 기사에서는 Java 프로세스가 OOM을 트리거할 때 문제를 해결하는 방법에 대해 독자에게 설명합니다.

초보자도 BAT 면접관과 경쟁할 수 있습니다: CAS 초보자도 BAT 면접관과 경쟁할 수 있습니다: CAS Aug 24, 2023 pm 03:09 PM

자바 동시 프로그래밍 시리즈의 추가 챕터인 C A S(비교 및 교환)는 여전히 이해하기 쉬운 스타일로 그림과 텍스트를 포함해 독자들이 면접관과 열띤 대화를 나눌 수 있도록 해준다.

지난주에 XX보험 인터뷰했는데 멋있었어요! ! ! 지난주에 XX보험 인터뷰했는데 멋있었어요! ! ! Aug 25, 2023 pm 03:44 PM

지난 주에 그룹의 한 친구가 Ping An Insurance와 인터뷰를 하러 갔습니다. 결과는 다소 아쉽지만, 말씀하신 것처럼 기본적으로 모든 질문에 낙담하지 않기를 바랍니다. 면접 질문을 외워야 면접이 해결될 수 있으니, 열심히 해주세요!

Ele.me의 필기 시험 문제는 간단해 보이지만 많은 사람들을 당황하게 합니다. Ele.me의 필기 시험 문제는 간단해 보이지만 많은 사람들을 당황하게 합니다. Aug 24, 2023 pm 03:29 PM

많은 회사의 필기 시험 문제를 과소평가하지 마십시오. 함정이 있으며 우연히 함정에 빠질 수 있습니다. 이런 주기에 관한 필기시험 문제를 접하게 된다면 차분하게 생각하고 차근차근 풀어나가시길 권합니다.

5개의 문자열 면접 질문, 10% 미만의 사람들이 모두 올바르게 답할 수 있습니다! (답변 포함) 5개의 문자열 면접 질문, 10% 미만의 사람들이 모두 올바르게 답할 수 있습니다! (답변 포함) Aug 23, 2023 pm 02:49 PM

​이 기사에서는 Java String 클래스에 관한 5가지 면접 질문을 살펴보겠습니다. 저는 인터뷰 과정에서 이 5가지 질문 중 몇 가지를 직접 경험했습니다. 이 기사는 이러한 질문에 대한 답변이 왜 이런지 이해하는 데 도움이 될 것입니다.

100개의 Linux 인터뷰 질문과 답변을 수집하는 것이 좋습니다 100개의 Linux 인터뷰 질문과 답변을 수집하는 것이 좋습니다 Aug 23, 2023 pm 02:37 PM

이 기사에는 Linux 개요, 디스크, 디렉토리, 파일, 보안, 구문 수준, 실제 전투, 파일 관리 명령, 문서 편집 명령, 디스크 관리 명령, 네트워크 통신 명령, 시스템 관리 명령, 백업을 다루는 총 30,000 단어가 넘습니다. 압축 명령 등 Linux 지식 포인트 해체.

메이투안, 대답할 수 있는지 볼까? 메이투안, 대답할 수 있는지 볼까? Aug 24, 2023 pm 03:51 PM

메이투안, 대답할 수 있는지 볼까?

See all articles