选择排序以及选择排序优化

简介: 1.普通选择排序2.优化选择排序

1.普通选择排序


    //普通选择排序
    public static void sort1(int[] array){
        int count = 0;//统计运行次数
        int cnt = 0; //交换次数
        for(int i=0;i<array.length-1;i++) {
            int min=array[i];
            int minIndex=i;
            count++;
            for(int j=i+1;j<array.length;j++){
                if(min>array[j]) {
                    min=array[j];
                    minIndex=j;
                }
            }
            if(minIndex!=i){
                cnt++;
                array[minIndex]=array[i];
                array[i]=min;
            }
        }
        System.out.println(Arrays.toString(array));
        System.out.println("运行次数:"+count+"次  交换次数:"+cnt);
    }


2.优化选择排序


import java.util.Arrays;
import java.util.Random;
/**
 * 选择排序优化
 */
class SelectionSort2 {
    public static void main(String[] args) {
        //产生一个随机数组
        Random r = new Random();
        int arr[] = new int[2000];
        for(int i=0;i<arr.length;i++){
            arr[i] =r.nextInt(1000);
        }
//因为本优化版本每次循环找出最大以及最小值,所以执行执行:arr.length/2
        int ArrLength = (arr.length/2);
        int  temp1,temp2;
        long count = 0;
        //记录开始时间
        long startStamp = System.currentTimeMillis();
        //算法开始
        for(int j=0;j<ArrLength;j++){
            int minIndex = j;
            int maxIndex= j;
            for(int i=j;i<arr.length-j;i++){
                if (arr[minIndex] > arr[i]) {
                    minIndex = i;
                }
                if (arr[maxIndex] < arr[i]) {
                    maxIndex= i;
                }
                count++;
            }
            temp1  = arr[minIndex];
            arr[minIndex] = arr[j];
            arr[j] = temp1;
            if(j!=maxIndex) { //maxIndex不能再原本的minIndex位置上
                temp2 = arr[maxIndex];
                arr[maxIndex] = arr[arr.length - j - 1];
            }else{
                temp2 = arr[minIndex];
                arr[minIndex] = arr[arr.length - j - 1];
            }
            arr[arr.length - j - 1] = temp2;
        }
        //计算算法结束时间
        long endStamp = System.currentTimeMillis();
        System.out.println("用时总长:"+(endStamp-startStamp));
        System.out.println("循环次数:"+count);
        System.out.println(Arrays.toString(arr));
    }
}
相关文章
|
1月前
|
搜索推荐 Java Go
希尔排序:优化的插入排序
希尔排序:优化的插入排序
31 2
|
3月前
|
搜索推荐 算法 Shell
排序(冒泡排序、选择排序、插入排序、希尔排序)-->深度剖析(一)
排序(冒泡排序、选择排序、插入排序、希尔排序)-->深度剖析(一)
126 5
|
6月前
|
搜索推荐 算法
选择排序(二)——堆排序(性能)与直接选择排序
选择排序(二)——堆排序(性能)与直接选择排序
53 1
|
6月前
|
搜索推荐 算法 程序员
常见排序算法原理及实现——第一部分(冒泡排序、插入排序和选择排序)
常见排序算法原理及实现——第一部分(冒泡排序、插入排序和选择排序)
|
12月前
|
机器学习/深度学习 算法 搜索推荐
【算法】六大排序 插入排序 希尔排序 选择排序 堆排序 冒泡排序 快速排序
【算法】六大排序 插入排序 希尔排序 选择排序 堆排序 冒泡排序 快速排序
|
搜索推荐 算法
排序算法 - 直接选择排序
排序算法 - 直接选择排序
66 0
|
算法 搜索推荐 C++
基本算法-选择排序
基本算法-选择排序
|
机器学习/深度学习 算法 搜索推荐
算法之选择排序、冒泡排序、插入排序
一、 评估算法优劣的核心指标是什么? (1)时间复杂度(流程决定) (2)额外空间复杂度(流程决定) (3)常数项时间(实现细节决定
43 0
|
算法 搜索推荐
算法-直接选择排序
算法-直接选择排序
|
搜索推荐 PHP
排序算法-选择排序详解
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
137 0