순서
- 이 문제를 해결하기 위해 주위에 전반적으로 분류 정수의 혼란 배열을 다음과
- 오름차순 정렬 방법
- 정렬되지 않은 정수 배열 []
선택 정렬
원칙
- 마다 디지털 스위칭 부 및 제 1 위치, 및 다수의 제 1 부분의 위치로의 정렬되지 않은 작은 수의 모든 정렬 된 배열 함유 품번까지 등등 정렬 및
- 주문 과정의 일부가 강조 표시 한 바와 같이
- 정렬되지 않은 부분을 시작합니다
- 디지털 정렬 부에 낮은 번호 (0)과 제 1 위치 (2) 과거의 수, 및 제 1 위치의 부 정렬되지
- 작은 디지털 숫자 부 (1)와 부분적으로 정렬 된 제 1 위치 (3) 교환과 정렬되지 않은 디지털 첫번째 위치
일체 포함] |
== 0 == |
== 1 == |
삼 |
5 |
4 |
이 |
- 작은 디지털 숫자 부 (2)와 부분적으로 정렬 된 제 1 위치 (3) 교환과 정렬되지 않은 디지털 첫번째 위치
일체 포함] |
== 0 == |
== 1 == |
== 2 == |
5 |
4 |
삼 |
- 작은 디지털 숫자 부 (3)와 부분적으로 정렬 된 제 1 위치 (5) 교환 및 정렬되지 않은 디지털 첫번째 위치
일체 포함] |
== 0 == |
== 1 == |
== 2 == |
== 3 == |
4 |
5 |
- 작은 디지털 숫자 부 (4)와 부분적으로 정렬 된 제 1 위치 (4) 교환 및 정렬되지 않은 디지털 첫번째 위치
일체 포함] |
== 0 == |
== 1 == |
== 2 == |
== 3 == |
== 4 == |
5 |
- 작은 디지털 숫자 부 (5)와 부분적으로 정렬 된 제 1 위치 (5) 교환 및 정렬되지 않은 디지털 첫번째 위치
일체 포함] |
== 0 == |
== 1 == |
== 2 == |
== 3 == |
== 4 == |
== 5 == |
자바로 코드
public class Sort {
static public void selectSort(int[] a){//传入一个数组
for(int i=0;i<a.length;i++){
int min=i,temp;//min是未排序部分最小值的下标,初始是a[i]
for(int j=i+1;j<a.length;j++)//从未排序部分开始找最小值的下标
if(a[j]<a[min])
min=j;
temp=a[i];//将未排序部分中最小值放到未排序部分的第一个位置,转换为排序部分
a[i]=a[min];
a[min]=temp;
}
}
}
삽입 정렬
원칙
- 만약 적절한 위치를 찾아 낼 때까지, 가장 낮은 위치에 높은 위치로부터 차례로 비교하여, 부분적으로 정렬 된 순서대로마다 첫 번째 숫자의 정렬되지 않은 부분은 위 부분에 포함
- 주문 과정의 일부가 강조 표시 한 바와 같이
- 정렬되지 않은 부분을 시작합니다
- 디지털 부품 주문을 통합 분류되지 않은 부분은.이 단계는 일반적으로 가장 좋은 시작 작동하지 않습니다
- 정렬 부에 제 번호 (3)의 정렬되지 않은 부분.
일체 포함] |
== 2 == |
== 3 == |
1 |
5 |
4 |
0 |
일체 포함] |
== 1 == |
== 2 == |
== 3 == |
5 |
4 |
0 |
- 디지털 부 (5)가 정렬되지 않은 정렬 부를 포함된다.
일체 포함] |
== 1 == |
== 2 == |
== 3 == |
== 5 == |
4 |
0 |
- 디지털 부 (5)가 정렬되지 않은 정렬 부를 포함된다.
일체 포함] |
== 1 == |
== 2 == |
== 3 == |
== 4 == |
== 5 == |
0 |
- 디지털 부 (5)가 정렬되지 않은 정렬 부를 포함된다.
일체 포함] |
== 0 == |
== 1 == |
== 2 == |
== 3 == |
== 4 == |
== 5 == |
자바로 코드
public class Sort {
static public void insertSort(int[] a){
for(int i=1;i<a.length;i++){//由于未排序第一个数字不用插入,所以直接从下标为1的位置开始
int temp=a[i];//拷贝未排序部分的第一个数字
int j;//记录最后未排序部分第一个数字的落点
for(j=i-1;j>-1;j--){//由于插入第i个,那么已排序部分最高位下标就是i-1,从大到小比较
if(a[j]>temp)//如果这个数比未排序部分第一个数字大,那么这个数字后移一位,第一个数字已经拷贝,所以不用担心覆盖(这是一种优化)
a[j+1]=a[j];//后移
else break;//不然位置合适就跳出循环
}
a[j+1]=temp;//将未排序部分第一个数字放到合适的位置
}
}
}
힐 정렬 (쉘 정렬)
원칙
- 여러 개의 서브 시퀀스들로 분할되어 기록되는 전체 첫 번째 행에 직접 삽입 정렬 시퀀스 전체 시퀀스는 "실질적으로 정렬 된"직접 삽입 정렬의 모든 기록 될
- 구성은 간단한 부재 와이즈 분할 시퀀스 아니지만, 레코드는 서브 - 시퀀스를 형성하는 단위로 구분한다. 선택은 중요 증가시킨다.
- 다른 힐이 경우 더 삽입 정렬에 정렬 및 델타 서브 시퀀스 사이에, 1보다 큰 경우, 전체 시퀀스가되어 있기 때문에, 삽입 정렬되어, 일단 최종 정렬 삽입 점프를 지시 "실질적으로 정렬 된" 힐 삽입 정렬보다 더 나은 정렬 왜 빨리, 이는
예
- 以下示例增量为1,3,5
- 插入第一个数字无需调整,仔细观察每趟排序,从第增量个数字开始,每个数字都需要插入操作,当然是在同一增量序列中
- 优先进行增量大的序列
![希尔排序](https://img2018.cnblogs.com/blog/1656494/201908/1656494-20190801144810808-971185714.jpg)
Code by java
static public void shellSort(int[] a){
int h=1;
while (h<a.length/3)
h=h*3+1;//求出最大增量
while (h>0){//增量大于零
for(int i=h;i<a.length;i+=h){//每次将以增量为下标位置开始的数字往前插入到数组中,插入必须在同一增量序列中
int temp=a[i];
int j;
for(j=i-h;j>-1;j-=h){
if(a[j]>temp)
a[j+h]=a[j];
else break;
}
a[j+h]=temp;
}
h/=3;//增量改变为较小的增量
}
}