排序算法:选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

平均时间复杂度:O(n2)

空间复杂度:O(1) (用于交换和记录索引)

package cn.hncu;

import java.sql.Timestamp;

public class selectSort {
    public static void main(String[] args) {
        int[] a = new int[10000];
        for(int i=0;i<a.length;i++){
            a[i] = (int)(Math.random()*a.length);
        }
        long startTime = System.currentTimeMillis();//返回以毫秒为单位的当前时间。
        //1 选择排序
        selectSort1(a);

        print(a);
        long endTime = System.currentTimeMillis();//返回以毫秒为单位的当前时间。
        System.out.println("程序运行时间: "+(endTime-startTime)+"ms");

    }

    private static void selectSort1(int[] a) {
        for(int i=0;i<a.length-1;i++){
            int k=i;
            for(int j=i;j<a.length;j++){
                if(a[k]>a[j]){
                    k=j;//找到最小的值为a[k]
                }
            }
            if(a[k]!=a[i]){//位运算交换值
                a[k]=a[k]^a[i];
                a[i]=a[k]^a[i];
                a[k]=a[k]^a[i];
            }
        }
    }

    private static void print(int[] a) {
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }
        System.out.println();
    }

}
时间: 2024-10-24 12:21:34

排序算法:选择排序的相关文章

JavaScript实现十种经典排序算法(js排序算法)

 冒泡排序算法 冒泡排序(Bubble Sort)是一种简单直观的排序算法.冒泡排序算法的步骤描述如下: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数. 针对所有的元素重复以上的步骤,除了最后一个. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. JavaScript实现冒泡排序算法的代码如下: function bubbleSort(arr) {     var l

算法速成(二)七大经典排序之选择排序

今天说的是选择排序,包括"直接选择排序"和"堆排序". 话说上次"冒泡排序"被快 排虐了,而且"快排"赢得了内库的重用,众兄弟自然眼红,非要找快排一比高下. 这不今天 就来了两兄弟找快排算账. 1.直接选择排序: 先上图: 说实话,直接选择排序最类似于人的本能思想,比如把大小不一的玩具让三岁小毛孩对大小 排个序, 那小孩首先会在这么多玩具中找到最小的放在第一位,然后找到次小的放在第二位, 以此类推...... ,小 孩子多聪明

算法-选择排序这两种有什么不同,注意粗体部分

问题描述 选择排序这两种有什么不同,注意粗体部分 public static void sort(Comparable[] a){ // 将a[] 按升序排列 int N = a. length; // 数组长度 for (i nt i = 0; i < N; i ++) { // 将a[i ] 和a[i +1. . N] 中最小的元素交换 int min = i ; // 最小元素的索引 for (int j = i +1; j < N; j ++) if (l ess(a[j ] a[mi

算法 选择排序-请教一个选择排序的算法问题

问题描述 请教一个选择排序的算法问题 你好, 我刚刚开始接触JAVA, 问一个选择排序的问题. private static void SelectionSort (int[] arr) { for(int i=0; i for(int j=i+1;j if (arr[i] > arr[j]) { int m; m = arr[i]; arr[i] = arr[j]; arr[j] = m; } } } } 这个方法正确,但是交换次数多了,所以我想改进一下. private static voi

算法 选择排序-C语言关于选择排序法的问题

问题描述 C语言关于选择排序法的问题 #include"stdio.h" #define?N?10 int?main()? { int?i,j,min,tem,a[N];? for(i=0;i ????scanf("%d",&a[i]); for(i=0;i { ????min=i;? ????for(j=i+1;j ?????????if(a[min]>a[j])? ?????????min=j;? ????tem=a[i];? ????a[i]=a

排序算法之二选择排序-简单选择排序和对堆排序

简单选择排序 (1)基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换,然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较位置.(2)实例: (3)代码实现: 1234567891011121314151617181920212223242526272829303132 /** * 简单选择排序 */ private static <AnyType extends Comparable<? super AnyType>> voi

c/c++ 数据结构和算法-选择排序/冒泡排序

冒泡排序 #include <stdio.h> void BubbleSort(int *a,int n);   int main(void) {     int k;     int a[10]={2,4,6,8,0,1,3,5,7,9};     for(k=0;k<10;k++)     {       if(k==9)           printf("%d\n",a[k]);       else           printf("%d,&qu

排序高级之选择排序_选择排序

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

java数组排序示例(冒泡排序、快速排序、希尔排序、选择排序)_java

快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现. 冒泡法是运用遍历数组进行比较,通过不断的比较将最小值或者最大值一个一个的遍历出来. 选择排序法是将数组的第一个数据作为最大或者最小的值,然后通过比较循环,输出有序的数组. 插入排序是选择一个数组中的数据,通过不断的插入比较最后进行排序. 复制代码 代码如下: package com.firewolf.sort; public class MySort {  /**  * @param args  */ public

Java排序算法 希尔排序

希尔排序(ShellSort)是插入排序的一种.是针对直接插入排序算法的改进.该方法又称缩小增量排序,因DL.Shell于1959年提出而得名.本文主要介绍希尔排序用Java是怎样实现的. AD: 希尔排序(缩小增量法)属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序.希尔排序并不稳定,O(1)的额外空间,时间复杂度为O(N*(logN)^2).最坏的情况下的执行效率和在平均情况下的执行效率相比相差不多. 基本思想: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成