插入排序算法实验报告 排序算法实验总结

 算法设计与分析基础

 实验报告

 应用数学学院

 二零一六年六月

 实验一 插入排序算法

 一、实验性质 设计

 二、实验学时 14学时

 三、实验目的1、掌握插入排序的方法和原理。

 2、掌握java语言实现该算法的一般流程。

 四、实验内容

 1、数组的输入。

 2、输入、输出的异常处理。

 3、插入排序的算法流程。

 4、运行结果的输出。

 五、实验报告

 Ⅰ、算法原理

  从左到右扫描有序的子数组,直到遇到一个大于(或小于)等于A[n-1]的元素,然后就把A[n-1]插在该元素的前面(或后面)。

  插入排序基于递归思想

 Ⅱ、书中源代码

  算法 InsertionSort(A[0..n-1])

 //用插入排序对给定数组A[0..n-1]排序

  //输入:n个可排序元素构成的一个数组A[0..n-1]

  //输出:非降序排列的数组A[0..n-1]

  for i ← 1 to n-1 do

  v ← A[i]

  j ← i-1

  while j ≥ 0 and A[j] > v do

  A[j+1] ← A[j]

  j ← j-1

  A[j+1] ← v

 Ⅲ、Java算法代码:

 import java.util.*;

 public class Charu {

  public static void main(String[] args) {

  int n = 5;

  int a[] = new int[n];

  int s = a.length;

  int i = 0, j = 0, v = 0;

  System.out.println("请输入若干个数字:");

  Scanner sc = new Scanner(System.in);

  try {

  while (i < s) {

  a[i] = sc.nextInt();

  i++;

  }

  for (i = 1; i <s; i++) {

  v = a[i];

  j = i - 1;

  while (j >= 0 && a[j] > v) {

  a[j + 1] = a[j];

  j--;

  }

  a[j + 1] = v;

  }

  System.out.println("插入排序结果显示:");

  for (i = 0; i < s; i++) {

  System.out.println(a[i]);

  }

  } catch (Exception es) {

  System.out.println(es);

  }

 

  }

 }

 Ⅳ、运行结果显示:

  图(1) 图(2)

 Ⅴ、实验结论:

  插入排序的基本操作是键值比较A[j]>v。键值比较次数显然依赖于特定的输入,在最坏的情况下,插入排序与选择排序的键值比较次数是完全一致的。在最好的情况下,在外部循环的每次迭代中,比较次数只执行一次。插入排序的平均性能比最差性能快两倍,以及遇到基本有序的数组时表现出优异的性能,使得插入排序领先与选择排序和冒泡排序。

推荐访问:算法 插入 排序 实验 报告