1、插入排序:
package cdu.pyx;
/**
* 选择
*/
public class SelectSort {
public static void selectSort(int[] arr){
for(int i=0; i<arr.length; i++) {
//最小数的索引
int minIndex = i;
for(int j=i; j<arr.length; j++) {
//找到最小数,并记录最小数的索引
if(arr[j] < arr[minIndex]) {
minIndex = j;
}
}
//交换符合条件的数
int tmp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tmp;
}
}
public static void main(String[] args) {
int[] array = new int[]{2, 1, 3, 9, -1, 0, 25, 49, 21};
selectSort(array);
for (int n :
array) {
System.out.print(n + " ");
}
}
}
2、shell排序
package cdu.pyx;
import java.util.Arrays;
public class shellSort {
public static void main(String []args){
int []arr ={1,4,2,7,9,8,3,6};
sort(arr);
System.out.println(Arrays.toString(arr));
int []arr1 ={1,4,2,7,9,8,3,6};
sort1(arr1);
System.out.println(Arrays.toString(arr1));
}
/**
* 希尔排序 针对有序序列在插入时采用交换法
* @param arr
*/
public static void sort(int []arr){
//增量gap,并逐步缩小增量
for(int gap=arr.length/2;gap>0;gap/=2){
//从第gap个元素,逐个对其所在组进行直接插入排序操作
for(int i=gap;i<arr.length;i++){
int j = i;
while(j-gap>=0 && arr[j]<arr[j-gap]){
//插入排序采用交换法
swap(arr,j,j-gap);
j-=gap;
}
}
}
}
/**
* 希尔排序 针对有序序列在插入时采用移动法。
* @param arr
*/
public static void sort1(int []arr){
//增量gap,并逐步缩小增量
for(int gap=arr.length/2;gap>0;gap/=2){
//从第gap个元素,逐个对其所在组进行直接插入排序操作
for(int i=gap;i<arr.length;i++){
int j = i;
int temp = arr[j];
if(arr[j]<arr[j-gap]){
while(j-gap>=0 && temp<arr[j-gap]){
//移动法
arr[j] = arr[j-gap];
j-=gap;
}
arr[j] = temp;
}
}
}
}
/**
* 交换数组元素
* @param arr
* @param a
* @param b
*/
public static void swap(int []arr,int a,int b){
arr[a] = arr[a]+arr[b];
arr[b] = arr[a]-arr[b];
arr[a] = arr[a]-arr[b];
}
}
3、快速排序
package cdu.pyx;
public class quickSort {
public static void quickSort(int[] arr,int low,int high){
int i,j,temp,t;
if(low>high){
return;
}
i=low;
j=high;
//temp就是基准位
temp = arr[low];
while (i<j) {
//先看右边,依次往左递减
while (temp<=arr[j]&&i<j) {
j--;
}
//再看左边,依次往右递增
while (temp>=arr[i]&&i<j) {
i++;
}
//如果满足条件则交换
if (i<j) {
t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
//最后将基准为与i和j相等位置的数字交换
arr[low] = arr[i];
arr[i] = temp;
//递归调用左半数组
quickSort(arr, low, j-1);
//递归调用右半数组
quickSort(arr, j+1, high);
}
public static void main(String[] args){
int[] arr = {10,7,2,4,7,62,3,4,2,1,8,9,19};
quickSort(arr, 0, arr.length-1);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+ " ");
}
}
}
4、选择排序:
package cdu.pyx;
/**
* 选择
*/
public class SelectSort {
public static void selectSort(int[] arr){
for(int i=0; i<arr.length; i++) {
//最小数的索引
int minIndex = i;
for(int j=i; j<arr.length; j++) {
//找到最小数,并记录最小数的索引
if(arr[j] < arr[minIndex]) {
minIndex = j;
}
}
//交换符合条件的数
int tmp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tmp;
}
}
public static void main(String[] args) {
int[] array = new int[]{2, 1, 3, 9, -1, 0, 25, 49, 21};
selectSort(array);
for (int n :
array) {
System.out.print(n + " ");
}
}
}