选择式排序法之选择排序法实现 -java版

计算算法时间复杂度比冒泡快一点

选择排序法核心思想是,第一次从R[0] ~R[n-1]中选择最小值然后与R[0]交换,第二次从R[1] ~R[n-1]中选取最小值与R[1]交换………第i次呢就是从R[i-1] ~R[n-1]中选取最小值,与R[i-1]元素交换;对于一个含有n个元素的数组,最多交换n-1次就得到了一个排序码从小到大的有序序列。

package com.PengRong.A;
import java.util.*;
/**
 *
 * @author PengRong
 *
 */
public class DemoSelection
{
 public static void main(String[] args)
 {
  // TODO Auto-generated method stub
  //随机产生一万个测试数据
  int len=10000;
  int[] arr =new int[len];
  for(int i=0; i<len; i++)
  {
   int t =(int)(Math.random()*10000);
   arr[i] =t;
  }

  Selection selection = new  Selection();
  selection.Test();
  selection.Sort(arr);
  selection.Test();
  /*for(int i=0; i<arr.length; i++)
  {
   System.out.println("arr[" +i+ "]="+arr[i]);
  }*/
 }
}
/**
 * @功能:选择排序实现;
 * 选择排序的思想是一次次将最小值放到前面的有序序列
 * @author PengRong
 *
 */
class Selection
{
 /**
  * @author PengRong
  * @功能:用于计算当前的系统时间
  */
 public void Test()
 {
  Calendar cal =Calendar.getInstance();
  System.out.println(cal.getTime());
 }
 public void Sort(int[] arr)
 {
  int temp = 0;//交换时候计入中间值
  int min = 0;//最小值
  int minIndex = 0;//最小值的索引
  //外层循环控制次数,对于一个含有n个元素的数组来说只需要循环n-1次就可以了。
  for(int j=0; j<arr.length-1; j++)
  {
   //每趟选择排序中默认第一个元素是最小的
   min = arr[j];
   minIndex = j;
   //内层循环找到这趟的最小值min
   for(int k =j+1; k<arr.length; k++)
   {
    if(min > arr[k])
    {
     min = arr[k];
     minIndex = k;
    }

   }
   //如果找到了最小值与默认最小值不一致,交换arr[j]与arr[minIndex]的数值
   if(minIndex != j)
   {
    temp = arr[j];
    arr[j] = arr[minIndex];
    arr[minIndex] = temp;
   }

  }

 }
}

该历程实现了对选择排序系统时间的显示,可以看到当参数数据在 int len=10000; 一万级别时候算法是非常快的,系统时间看不出有流失

当int len =80000;用了8s

当int len =100000;用了13s

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-07 03:43:55

选择式排序法之选择排序法实现 -java版的相关文章

C语言常见的排序方法——冒泡法、选择法、插入法

当我们要对C中一组数据进行排序是常见的排序方法有冒泡法.选择法.插入法 冒泡排序法(升序):假设一组数据a[0].a[1].a[2].a[3]...a[n],第一轮:先比较a[0]与a[1].a[1]与a[2]...a[i]与a[i+1]...a[n-1]与a[n]的大小,如果a[i]与a[i+1]不是升序(即a[i] > a[i+1]),那么就将a[i]与a[i+1]的值互换,第一轮过后,a[n]就是最大值:第二轮:运用第一轮同样的方法,比较a[0]与a[1].a[1]与a[2]...a[i]

排序算法: 选择排序法

选择排序法:在排序数组中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. 实现思路: 1,每次先找到最小数(最大数); 2,第i趟找到最小数和第i个数组互换; 3,重复(1)(2),直到最后排序成功;   0 1 2 3 4 5 6 7   6 10 4 90 52 77 8 3 0  3  10 4  90   52 77  8  6  1  3 4

C语言排序算法之简单交换法排序,直接选择排序,冒泡排序

C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 1 /*简单交换法排序 2 根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置 3 交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动 4 不稳定 5 */ 6 #include<windows.h> 7 #include<stdio.h> 8 void main(){ 9 int i,j,arr[10

排序总结之选择式排序

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

Python算法教程第三章知识点:求和式、递归式、侏儒排序法和并归排序法

本文目录:一.求和式:二.递归式:三.侏儒排序法和并归排序法微信公众号:geekkr</br></br></br> 一.求和式 # 假设有一函数为f(),则在Python中经常使用的求和方法如下. sum(f(i) for i in range(m, n+1)) + sum(g(i) for i in range(m, n+1)) sum(f(i)+g(i) for i in range(m, n+1)) </br>二.递归式 # 举个栗子 def S(se

C语言数据结构各种排序算法(选择,直接,希尔,起泡等排序)

#include <stdio.h> #include<stdlib.h> #include <time.h> #define MAX 20         /*线性表中最多元素个数*/ typedef int KeyType; typedef char InfoType[10]; typedef struct { KeyType key; InfoType data; }RecType; void InsertSort(RecType R[],int n) { int

排序算法之简单排序(冒泡、选择、插入)

1.基本概念 内部排序和外部排序 根据排序过程中,待排序的数据是否全部被放在内存中,分为两大类: 内部排序:指的是待排序的数据存放在计算机内存中进行的排序过程: 外部排序:指的是排序中要对外存储器进行访问的排序过程. 内部排序是排序的基础,在内部排序中,根据排序过程中所依据的原则可以将它们分为5类:插入排序.交换排序.选择排序.归并排序:根据排序过程的时间复杂度来分,可以分为简单排序.先进排序.冒泡排序.简单选择排序.直接插入排序就是简单排序算法. 评价排序算法优劣的标准主要是两条:一是算法的运

排序 之 冒泡排序 简单选择排序 直接插入排序 希尔排序

排序的基本概念 假设含有n个记录的序列为{r1,r2,--,rn},其相应的关键字分别为{k1,k2,--,kn},需确定1,2,--,n的一种排序p1,p2,--,pn,使其相应的关键字满足kp1≤kp2≤--≤kpn非递减(或非递增)关系,即使得序列称为一个按关键字有序的序列{rp1,rp2,--,rpn},这样的操作就称为排序. 排序的稳定性 假设ki=kj(1≤i≤n,1≤j≤n,i≠j),且在排序前的序列中ri领先于rj(即i<j).如果排序后ri仍领先于rj,则称所用的排序方法是稳定

数据结构之简单排序的三种玩法

本文主要介绍,一个简单排序算法都可以有哪几种玩法(以选择排序为例,代码请在cpp文件下运行) 选择排序...总结为三个步骤就是: 1.在一段区间内找最大/最小元素. 2.将最大/最小元素与区间中的第一个值进行交换 3.缩小查找区间 如果你还没有理解?不用担心,请参考:选择排序_百度百科:http://baike.baidu.com/item/选择排序 玩法1:初窥门径 如果理解了选择排序的算法,想要把它实现成一段代码,对于代码能力比较强的小伙伴来说,并不是一件复杂的事情,因此我们达到的第一重境界