一、选择排序
1.实现思路
在数组中待排序的数据元素中选出最小(或最大)的一个元素,依次存放在序列的起始位置,直到全部待排序的数据元素排完。
2.实现代码
public static void main (String [ ] args){
int [] arr = new int [] {4, 19, 11, 109 , 3, 56};
for(int i = 0;i<arr.length;i++) {
for(int j = i+1;j<arr.length;j++) {
if(arr[i]>arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
System.out.print(arr[i]+" ");
}
}
二、插入排序
1.实现思路
两层循环:
1 外层循环负责获取没有排序的一个元素.外循环从1开始
2 内循环负责在已经排序的数组中给未排序元素找位置
(当数据量比较小或基本上有序时,插入排序算法是最好的选择。插入排序的比较次数仍然是n的平方,但在一般情况下,它要比冒泡排序快一倍,比选择排序还要快一点。它常常被用在复杂排序算法的最后阶段,比如快速排序。)
2.实现代码
public class InsertSort {
public static void main(String[] args) {
int[] values = { 5, 2, 4, 1, 3 };
sort(values);
for (int i = 0; i < values.length; ++i) {
System.out.println(values[i]);
}
}
public static void sort(int[] values) {
int temp;
int j = 0;
for (int i = 1; i < values.length; i++) {
if(values[i]<values[i-1])//此处的判断很重要,这里体现了插入排序比冒泡排序和选择排序快的原因。
{
temp = values[i];
//数据往后移动
for (j=i-1; j>=0 && temp<values[j]; j--)
{
values[j+1] =values[j];
}
//将数据插入到j+1位置
values[j+1] =temp;
System.out.print("第" + (i + 1) + "次:");
for (int k = 0; k < values.length; k++) {
System.out.print(values[k]+",");
}
System.out.println("");
}
}
}