소위 정렬은 레코드에 포함된 하나 또는 일부 키워드의 크기에 따라 일련의 레코드를 오름차순 또는 내림차순으로 배열하는 작업입니다. 정렬 알고리즘은 필요에 따라 레코드를 정렬하는 방법입니다. 정렬 알고리즘은 많은 분야, 특히 대량의 데이터를 처리하는 분야에서 상당한 주목을 받아왔습니다. 훌륭한 알고리즘은 많은 리소스를 절약할 수 있습니다.
단순 삽입 정렬
/** * 将位置p上的元素向左移动,直到它在前p+1个元素中的正确位置被找到的地方 * @param a an array of Comparable items */public static <AnyType extends Comparable<? super AnyType>> void insertionSort(AnyType[] a) { int j; for (int p = 1; p < a.length; p++) { AnyType tmp = a[p]; for (j = p; j > 0 && tmp.compareTo(a[j-1]) < 0; j--) { a[j] = a[j-1]; } a[j] = tmp; } System.out.println(Arrays.toString(a));}
쉘 정렬 힐 정렬
/** * @param a an array of Comparable items */public static <AnyType extends Comparable<? super AnyType>> void shellSort(AnyType[] a) { int j; for (int gap = a.length / 2; gap > 0; gap /= 2) { for (int i = gap; i < a.length; i++) { AnyType tmp = a[i]; for (j = i; j >= gap && tmp.compareTo(a[j - gap]) < 0; j -= gap) { a[j] = a[j - gap]; } a[j] = tmp; } } System.out.println(Arrays.toString(a)); }
이진 정렬 이진 정렬
/** * @param a an array of Comparable items */public static <AnyType extends Comparable<? super AnyType>> void binarySort(AnyType[] a) { Integer i,j; Integer low,high,mid; AnyType temp; for(i=1;i<a.length;i++){ temp=a[i]; low=0; high=i-1; while(low<=high){ mid=(low+high)/2; if(temp.compareTo(a[mid]) < 0) { high=mid-1; } else { low=mid+1; } } for(j=i-1;j>high;j--) a[j+1]=a[j]; a[high+1]=temp; } System.out.println(Arrays.toString(a)); }
버블 정렬
/** * @param a an array of Comparable items */public static <AnyType extends Comparable<? super AnyType>> void bubbleSort(AnyType[] a) { Integer i,j; AnyType temp; for(i=1;i<a.length;i++) { for(j=0;j<a.length-i;j++) { //循环找到下沉"气泡",每下沉一位,下次比较长度较小一位 if(a[j].compareTo(a[j+1]) > 0) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; //将"气泡"下沉到当前比较的最后一位 } } } System.out.println(Arrays.toString(a)); }
선택 정렬 선택 정렬
/** * @param a an array of Comparable items */public static <AnyType extends Comparable<? super AnyType>> void selectSort(AnyType[] a) { Integer i,j,min; AnyType temp; for(i=0;i<a.length-1;i++) { temp=a[i]; min=i; //将当前位置元素当作最小值元素(其实是要将最小值元素交换到当前) for(j=i+1;j<a.length;j++) { if(temp.compareTo(a[j]) > 0) { //用a[i]和后面所有元素逐个比较,找到最小指的下标并记录 temp=a[j]; //下一位小于前一位,则将下一位赋值给temp并继续往右移动比较 min=j; //最小值的下标,赋值给min } } a[min] = a[i]; //将最小值元素的和当前元素交换,使得当前元素为其后面所有元素中最小值 a[i] = temp; } System.out.println(Arrays.toString(a));
위 내용은 튜토리얼입니다 여러 정렬 알고리즘에 대해 모두에게 도움이 되기를 바랍니다.
관련 권장 사항: