Algoritmo 4 (estrutura de dados) aprendizagem - o princípio e o código do algoritmo de classificação primária (classificação por seleção, classificação por inserção, classificação por colina)
Uma breve descrição é: primeiro encontre o menor elemento na matriz e troque-o pelo primeiro elemento da matriz; em seguida, encontre o menor elemento entre os elementos restantes e troque a posição com o segundo elemento da matriz; e assim por diante, até o Classifique toda a matriz.
Para uma matriz de comprimento N, leva cerca de (N ^ 2) / 2 comparações e N trocas para selecionar a classificação
2. Classificação de inserção
Classificação por inserção, insira cada elemento na posição apropriada em outras matrizes locais ordenadas, a fim de abrir espaço para o elemento inserido, precisamos mover os elementos restantes na posição apropriada em um lugar;
Simplificando, primeiro determine um valor de índice i, partindo deste i, defina j = i, compare a [j] com a [j-1], se a [j-1]> a [j] trocar os dois , J–, se a [j-1] <a [j], significa que você alcançou a posição correta, saia do pequeno loop, caso contrário, continue a repetir a operação até j = 0; após completar o pequeno loop, coloque o índice i ++.
3. Hill sort
Para simplificar, primeiro altere o intervalo de troca de "classificação por inserção" de 1 para h, e então h = h / 3 depois que a rodada for organizada e, em seguida, repita a operação até h> = 1.
A seguir está o código
import java.util.*;publicclassExample{
//选择排序publicstaticvoidSelectSort(Comparable[] a){
for(int i =0; i < a.length; i++){
int min = i;for(int j = i+1; j < a.length; j++){
if(less(a[j], a[min])){
min = j;}}exch(a, i, min);}}/*插入排序,简单来说就是先确定一个索引值i,从这个i开始,定义j=i,a[j]与a[j-1]比较,若a[j-1]>a[j]则交换二者,j--,
若a[j-1]<a[j]则表明已经到了正确的位置,退出小循环,否则继续重复操作,直到j=0;完成小循环后把索引i++*/publicstaticvoidInsertSort(Comparable[] a){
for(int i =1; i < a.length; i++){
for(int j = i; j >0&&less(a[j], a[j-1]); j--){
exch(a, j, j-1);}}}//希尔排序publicstaticvoidShellSort(Comparable[] a){
int h =1;while(h < a.length/3){
h =3*h +1;}while(h >=1){
for(int i = h; i < a.length; i++){
for(int j = i; j >= h &&less(a[j], a[j-h]); j-=h){
exch(a, j, j-h);}}
h = h /3;}}//做比较判断,返回bool类型publicstaticbooleanless(Comparable v, Comparable w){
return v.compareTo(w)<0;}//交换数组元素privatestaticvoidexch(Comparable[] a,int i,int j){
Comparable t = a[i];
a[i]= a[j];
a[j]= t;}//打印出数组publicstaticvoidshow(Comparable[] a){
for(int i =0; i < a.length; i++){
System.out.print(a[i]+" ");}
System.out.println();}publicstaticvoidmain(String[] args){
Scanner in =newScanner(System.in);int n = in.nextInt();
Comparable[] arr =newComparable[n];for(int i =0; i < arr.length; i++){
arr[i]= in.nextInt();}SelectSort(arr);InsertSort(arr);ShellSort(arr);show(arr);}}