最近在看java 的排序算法有几点领悟说下
1.直接插入排序(以数组为例)
所谓直接插入排序就是
算法描述:对于给定的一个数组,初始时假设第一个记录自成一个有序序列,其余记录为无序序列。接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直至最后一个记录插入到有序序列中为止。
以下是java实现:
public class test16 { public static void main(String[] args) { int arr[]={1,5,2,4,8}; sort(arr); for(int a:arr){ System.out.print(a); } } public static void sort(int arr[]){ for(int i=1;i<arr.length;i++){ for(int j=i-1;j>=0;j--){ if(arr[j]>arr[j+1]){ int temp=arr[j+1]; arr[j+1]=arr[j]; arr[j]=temp; } } } } }
2.简单选择排序(以数组为例)
(1)从待排序序列中,找到关键字最小的元素;
(2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;
(3)从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。
以下是java代码:
package sort; public class SelectSort { public static void main(String[] args) { int arr[]={8,4,2,4,0}; sort(arr); for(int a:arr){ System.out.print(a+" "); } } public static void sort(int arr[]){ for(int i=0;i<arr.length;i++){ int index=i; for(int j=i+1;j<arr.length;j++){ if(arr[j]<arr[index]){ index=j; } if(index!=i){//这里表示如果当前位置不是最小值 (或者说有变化)就交换 注意也要定义中间变量 ps:这里困扰了笔者很久,可能笔者不够聪明哈哈 int temp=arr[index]; arr[index]=arr[i]; arr[i]=temp; } } } } }
由于笔者水平和认知有限 有错误的地方还请指正