输入:[24,17,40,28,13,14,22,32,40,21,48,4,47,8,37,18]
输出:[4,8,13,14,17,18,21,22,24,28,32,27,40,40,47,48]
请分别使用插入排序算法和选择排序算法完成上述排序问题。
选择排序:
for (int j = 0; j < gas.length; j++) {
for (int i = j+1; i < gas.length; i++) {
if (gas[i] < gas[j]) {
int tem = gas[i];
gas[i] = gas[j];
gas[j] = tem;
}
}
}
插入排序:
for (int i = 1; i < gas.length; i++) {
for (int j = i; j >= 1; j--) {
if (gas[j] < gas[j - 1]) {
int tem = gas[j];
gas[j] = gas[j - 1];
gas[j - 1] = tem;
}
}
}
输出结果
插入排序
package ca;
import java.util.Arrays;
public class Insertion
{
public static void main(String[] args) {
int a[]={24,17,40,28,13,14,22,32,40,21,48,4,47,8,37,18};
Insertion.sort(a);
}
public static void sort(int[] a)
{
//假设将a[]按升序排列
for (int i=1;i<a.length;i++)
{
//将a[i]插入到a[i-1],a[i-2],a[i-3]……之中
for(int j=i;j>0&&(a[j]<a[j-1]);j--)
{
int temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
System.out.println(Arrays.toString(a));
}
}
选择排序
package ca;
import java.util.Arrays;
/***
* 选择排序
* */
public class SelectionSort {
public static void main(String[] args) {
int[] a = { 24,17,40,28,13,14,22,32,40,21,48,4,47,8,37,18 };
SelectionSort.selectionSort(a);
}
public static void selectionSort(int[] arr) {
for (int i = 0; i < (arr.length - 1); i++) {
//先假设每次循环时,最小数的索引为i
int minIndex = i;
//每一个元素都和剩下的未排序的元素比较
int count =0;
for (int j = i + 1; j < arr.length; j++) {
count++;
if (arr[j] < arr[minIndex]) { //寻找最小数
minIndex = j; //将最小数的索引保存
}
}
//经过一轮循环,就可以找出第一个最小值的索引,然后把最小值放到i的位置
swap(arr, i, minIndex);
}
System.out.println(Arrays.toString(arr));
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}