이 글에서는 주로 Java 버블정렬과 퀵정렬 예제코드를 소개하고 있으니 필요하신 분들은
버블정렬
버블 정렬은 간단한 정렬 알고리즘입니다. 정렬할 시퀀스를 반복적으로 살펴보며 한 번에 두 요소를 비교하고 순서가 잘못된 경우 교체합니다. 더 이상 교환이 필요하지 않을 때까지 어레이 방문 작업이 반복됩니다. 이는 어레이가 정렬되었음을 의미합니다. 이 알고리즘의 이름은 작은 요소가 스와핑을 통해 배열의 맨 위로 천천히 "부동"된다는 사실에서 유래되었습니다. 버블 정렬 알고리즘은 다음과 같이 구현됩니다. [정렬 후/** * 冒泡排序 * 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 * 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 * 针对所有的元素重复以上的步骤,除了最后一个。 * 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 * @param numbers 需要排序的整型数组 */ public static void bubbleSort(int[] numbers) { int temp = 0; int size = numbers.length; for(int i = 0 ; i < size-1; i ++) { for(int j = 0 ;j < size-1-i ; j++) { if(numbers[j] > numbers[j+1]) //交换两数位置 { temp = numbers[j]; numbers[j] = numbers[j+1]; numbers[j+1] = temp; } } } }
빠른 정렬
빠른 정렬의 기본 개념:
레코드를 분할하여 두 개의 독립적인 부분으로 정렬 하나의 정렬 단계를 통해 레코드의 한 부분의 키워드가 다른 부분의 키워드보다 작으면 전체 순서가 정해질 때까지 두 부분이 계속 정렬됩니다. 전체 시퀀스를 배열로 취급하고 0번째 위치를 중심축으로 간주하여 마지막 위치와 비교하여 그보다 작으면 교환하고, 크면 처리하지 않습니다. 교환한 후에는 더 작은 것과 결합됩니다. 그 끝과 비교하여 그보다 작으면 교환되지 않고, 그보다 크면 교환됩니다. 이런 식으로는 을 앞뒤로 반복하여 한 패스로 정렬이 완료됩니다. 왼쪽은 중심축보다 작고 오른쪽은 중심축보다 큽니다. 메소드는 두 개의 독립적인 배열을 정렬하는 데 사용됩니다.
코드는 다음과 같이 구현됩니다. 1. 중심축의 위치를 찾습니다(최하위 비트를 중심축으로 사용)/** * 查找出中轴(默认是最低位low)的在numbers数组排序后所在位置 * * @param numbers 带查找数组 * @param low 开始位置 * @param high 结束位置 * @return 中轴所在位置 */ public static int getMiddle(int[] numbers, int low,int high) { int temp = numbers[low]; //数组的第一个作为中轴 while(low < high) { while(low < high && numbers[high] > temp) { high--; } numbers[low] = numbers[high];//比中轴小的记录移到低端 while(low < high && numbers[low] < temp) { low++; } numbers[high] = numbers[low] ; //比中轴大的记录移到高端 } numbers[low] = temp ; //中轴记录到尾 return low ; // 返回中轴的位置 }2.
/** * * @param numbers 带排序数组 * @param low 开始位置 * @param high 结束位置 */ public static void quickSort(int[] numbers,int low,int high) { if(low < high) { int middle = getMiddle(numbers,low,high); //将numbers数组进行一分为二 quickSort(numbers, low, middle-1); //对低字段表进行递归排序 quickSort(numbers, middle+1, high); //对高字段表进行递归排序 } }3.
/** * 快速排序 * @param numbers 带排序数组 */ public static void quick(int[] numbers) { if(numbers.length > 0) //查看数组是否为空 { quickSort(numbers, 0, numbers.length-1); } }
일반적으로 퀵 정렬은 동일한 크기(O(nlog2n))의 정렬 방법 중 평균 성능이 가장 좋은 것으로 간주됩니다. 그러나 초기 순서가 키순으로 정렬되거나 기본적으로 정렬되면 퀵 정렬은 버블 정렬로 변질됩니다. 이를 개선하기 위해 일반적으로 벤치마크 레코드를 선택하는 데 "3-in-1 방법"이 사용됩니다. 즉, 두 끝점을 중심으로 하는 3개의 레코드 키와 정렬 간격의 중간점을 지점 레코드로 조정합니다. Quicksort는 불안정한 정렬 방법입니다.
메소드 테스트인쇄
함수public static void printArr(int[] numbers) { for(int i = 0 ; i < numbers.length ; i ++ ) { System.out.print(numbers[i] + ","); } System.out.println(""); }
public static void main(String[] args) { int[] numbers = {10,20,15,0,6,7,2,1,-5,55}; System.out.print("排序前:"); printArr(numbers); bubbleSort(numbers); System.out.print("冒泡排序后:"); printArr(numbers); quick(numbers); System.out.print("快速排序后:"); printArr(numbers); }
정렬 전: 10,20,15,0,6,7,2,1,-5,55 ,
버블 정렬 후: -5,0,1,2,6,7,10,15,20,55,
빠른 정렬 후: -5,0,1, 2 ,6,7,10,15,20,55,
【관련 추천】
1.
특별 추천: " php Programmer Toolbox" V0.1 버전 다운로드 2.
무료 Java 비디오 튜토리얼Java 주석 종합 분석위 내용은 버블 및 퀵 정렬에 대한 코드 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!