Algs4-2.1.17动画-选择排序

2.1.17动画。修改插入排序和选择排序的代码,使之将数组内容绘制成正文中所示的棒状图。在每一轮排序后重绘图片来产生动画效果,并以一张“有序”的图片作为结束,即所有圆棒均已按照高度有序排列。提示:使用类似于正文中的用例来随机生成Double值,在排序代码的适当位置调用show()方法,并在show()方法中清理画布并绘制棒状图。

public class Selection
{
    public static void sort(Comparable[] a)
    {
        int N=a.length;
        for (int i=0;i<N;i++)
        {
            int min=i;
            for (int j=i+1;j<N;j++)
                if (less(a[j],a[min])) min=j;
            exch(a,i,min);
            showAnimation(a);
        }
    }

private static boolean less(Comparable v,Comparable w)
    { return v.compareTo(w)<0;}
   
    private static void exch(Comparable[] a,int i,int j)
    {
        Comparable t=a[i];
        a[i]=a[j];
        a[j]=t;
    }
   
    private static void show(Comparable[] a)
    {
        for (int i=0;i<a.length;i++)
            StdOut.print(a[i]+" ");
        StdOut.println();
    }
   
   
    private static void showAnimation(Comparable[] a)
    {
       StdDraw.setXscale(0.0,a.length);
       StdDraw.setYscale(0.0,a.length);
       StdDraw.setPenRadius(0.005);
       StdDraw.pause(100);
       StdDraw.clear(StdDraw.GRAY);
       StdDraw.setPenColor(StdDraw.BLACK);
        for(int i=0;i<a.length;i++)
        {
            StdDraw.line(i*1.0,0.0,i*1.0,(Double)a[i]*1.0);
        }
    }
    public static boolean isSorted(Comparable[] a)
    {
        for (int i=0;i<a.length;i++)
            if(less(a[i],a[i-1])) return false;
        return true;
    }
   
    public static void main(String[] args)
    {
        int N=Integer.parseInt(args[0]);
        Double[] a=new Double[N];
        for(int i=0;i<N;i++)
            a[i]=StdRandom.uniform(0.0,N*1.0);
        //
        StdDraw.pause(5000);
        sort(a);
    }
}

原文地址:https://www.cnblogs.com/longjin2018/p/9860034.html

时间: 2024-11-02 02:04:35

Algs4-2.1.17动画-选择排序的相关文章

秒懂插入排序与选择排序

插入排序原理:它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 插入排序核心:假设第一个元素排好,之后的元素对排好的部分从后向前比较并逐一移动. 插入排序实现: void insertion_sort(int a[], int n) { int i,j,tmp; for (i = 1; i < n; i++) { tmp = a[i]; for (j = i - 1; j >= 0 && a[j] > tmp; j--) {

&lt;17&gt;【掌握】冒泡排序代码实现+【掌握】选择排序代码实现

#include <stdio.h> void maoPao(int arr[],int len){ int temp; //双重循环 for(int i=0;i<len-1;i++){ //因为i的值每变化一次,跑了一趟,按照冒泡的思想 //有一个数已经下沉了 //没有必要和已经有序的数据进行比较了 //j<len-1-i;所以 j<len-1也可以,但是多跑会 for (int j=0; j<len-1-i; j++) { if (arr[j]>arr[j+1

常见排序算法导读(3)[简单选择排序]

这一节将介绍简单选择排序(Simple Selection Sort). 在介绍简单排序算法之前,先给出排序的确切定义,并简单介绍一下排序算法的稳定性. 排序的确切定义 假设含有n个对象的序列为{R[0], R[1], ..., R[n-1]}, 其对应的关键字(key)序列为{K[0], K[1], ..., K[n-1]}. 所谓排序, 就是确定0, 1, ..., n-1的一种排列p[0], p[1], ..., p[n-1], 使各个关键字满足如下的非递减(升序)或非递增(降序)关系:

Algs4-2.1.17动画-插入排序

2.1.17动画.修改插入排序和选择排序的代码,使之将数组内容绘制成正文中所示的棒状图.在每一轮排序后重绘图片来产生动画效果,并以一张"有序"的图片作为结束,即所有圆棒均已按照高度有序排列.提示:使用类似于正文中的用例来随机生成Double值,在排序代码的适当位置调用show()方法,并在show()方法中清理画布并绘制棒状图. public class Insertion{    public static void sort(Comparable[] a)    {       

算法 排序lowB三人组 冒泡排序 选择排序 插入排序

参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序的稳定性: 经过某种排序后,如果两个记录序号同等,且两者在原无序记录中的先后秩序依然保持不变,则称所使用的排序方法是稳定的,反之是不稳定

选择排序——C实现

选择排序: 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 选择排序的主要优点与数据移动有关.如果某个元素位于正确的最终位置上,则它不会被移动.选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换.在所有的完全依靠交换去移动

简单选择排序

选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 选择排序不稳定,会导致相同值位置发生改变. 算法步骤: 1)首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置 2)再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾. 3)重复第二步,直到所有元素均排序完毕. public class SelectionSort { publi

Java学习 (七)、数组,查找算法,二分查找法,冒泡排序,选择排序,插入排序

一.常用数组查找算法 工作原理:它又称为顺序查找,在一列给定的值中进行搜索,从一端的开始逐一检查每个元素,知道找到所需元素的过程. 例1:查找指定的数在数组中出现的位置,找到返回下标,找不到返回-1 1 import java.util.Scanner; 2 public class LinearSearch{ 3 public static void main(String []argas) 4 { 5 int [] array={10,100,90,65,80,92}; 6 System.o

1)②排序算法之选择排序{1]直接选择排序

1 #include<iostream> 2 using namespace std; 3 4 //*******直接选择排序********* 5 int select_sort(int n,int array[100]){ 6 int i,j; 7 for(i=0;i<n;i++){ 8 for(j=i;j<n;j++){ 9 if(array[i]>array[j]){ 10 int temp=array[j]; 11 array[j]=array[i]; 12 arr