算法_选择排序

一、为什么学了之后过段时间又会忘记了?

因为没有去运用它和认为面试需要而没有真正的重视。现在给它赋予意义:1.那就是基础牢固,才可触类旁通2.真正记得和随时可以拿出手,那么面试可以PK掉一大批人。不然看到一个精妙的算法就学一个,永远只是学到某一个而没有自己的思维在里面。

二、选择排序算法代码

#include <iostream>
using namespace std;

void selectionSort(int arr[],int n){
    for (int i = 0; i < n; i++){
        int minIndex = i;        //寻找i~n中的最小值,然后进行位置的转换
        for (int j = i + 1; j < n; j++){
            if ( arr[j] < arr[minIndex] ){
                minIndex = j;
            }
            swap(arr[i], arr[j]);
        }
    }
}

int main(int argc, const char * argv[]) {
    int a[10] = {10,9,8,7,6,5,4,3,2,1};
    selectionSort(a,10);
    for( int i = 0 ; i < 10 ; i ++ )
        cout<<a[i]<<" ";
    cout<<endl;
    return 0;
}

让我闭下眼睛,想想,到底掌握选择排序算法的核心。好,每天花一分钟看一遍。

三、插入排序算法代码

//插入排序
template<typename T>
void insertionSort(T arr[],int n){
    //因为第0个元素不需要比较,直接从下标为1的元素开始比较
    for (int i = 1; i < n; i++) {
        for (int j = i; j > 0; j--) {

            if (arr[j] < arr[j-1]) {
                swap(arr[j], arr[j-1]);
            }else break;
        }
    }
}

思路:插入排序,从下标为1的元素开始和它前面的元素进行相比,小就换位置,大就退出循环。从下标为2的元素开始...

四、插入排序算法改进

一次交换就是3次赋值。改进就是改进交换,每次比较后只交换一次。

//改进版插入排序

template<typename T>
void insertionExcellentSort(T arr[],int n){
    for (int i = 1; i < n; i++) {
         T e = arr[i];
        int  j;
        for ( j = i; j > 0 && arr[j-1] > e; j--) {
            arr[j] = arr[j-1];
        }
        arr[j] = e;
    }
}

怎么实现的,感觉用语言不好表达,我今天晚上就要过一遍。

原文地址:https://www.cnblogs.com/yuhui-snail/p/8521340.html

时间: 2024-10-04 18:31:16

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

java常见数据算法_选择排序

选择排序的原理:遍历所有的元素,得到最小的元素,并将最小的元素与左边第一个元素进行交换,再次遍历除了第一个位置的所有元素,得到最小的元素,与左边第二个元素进行交换.当进行第二次遍历的时候,将最小的元素与左边的第二个元素进行交换,如此循环遍历,即可得到排序后的元素.Demo实现的基本基本步骤:1.准备数组2.编写常见的数组操作方法3.编写选择排序的方法4.测试选择排序具体参考如下:package com.zcp.ch03; /** @author Administrator 冒泡排序的实现*/pu

【数据结构与算法】选择排序

选择排序没什么好说的,直接上代码吧 public class SelectSort { public void selectSort(int[] in) { int inLength = in.length; int minIndex = 0; for (int i = 0; i < inLength; i++) { minIndex = i; for (int j = i + 1; j < inLength; j++) { if (in[j] < in[minIndex]) { min

数据结构排序算法之选择排序

今天继续介绍一种排序算法:选择排序. 选择排序的基本思想就是从待排序列中选择出最小的,然后将被选出元素和序列的第一个元素互换位置(当前默认是升序排列),则互换完成后第一个元素就是整个序列的最小的元素,则一次选择排序结束.然后我们从剩下的子序列中选择出最小的,然后将该被选出来的元素和该子序列的第一个元素(即整个序列的第二个元素)互换位置,则当前整个序列的第二个元素就是当前序列中的次最小值,第二次选择排序结束.以此类推,直到该待排序列只剩下一个元素后,则整个序列有序. 具体过程如下图所示: 下面就不

排序算法之选择排序

一. 算法描述 选择排序:在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换......第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成. 二. 算法分析 平均时间复杂度:O(n2) 空间复杂度:O(1)  (用于交换和记录索引) 稳定性:不稳定 (比如序列[5, 5, 3]第一趟就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面) 三. 算法实现

java结构与算法之选择排序

一 .java结构与算法之选择排序 什么事选择排序:从一组无序数据中选择出中小的的值,将该值与无序区的最左边的的值进行交换. 简单的解释:假设有这样一组数据 12,4,23,5,找到最小值 4 放在最右边,然后找到 5 放在  4 的后面,重复该操作. 选择排序参考代码: public class ChooseSort { int[] array = null; @Test public void testPopSort() { array = new int[5]; array[0] = 45

直接插入排序 快速排序算法 直接选择排序

以下三个验证性实验都做. (1)直接插入排序算法验证. (2)快速排序算法验证. (3)直接选择排序算法验证. #include<iostream> #include<cstdlib> using namespace std; class dishizhang { public: int a[10]; int b[10]; dishizhang() { int tem; for(int i = 0 ; i < 10 ; i ++) { while(1) { int flag

Java中的经典算法之选择排序(SelectionSort)

Java中的经典算法之选择排序(SelectionSort) a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录.基于此思想的算法主要有简单选择排序.树型选择排序和堆排序.(这里只介绍常用的简单选择排序) b) 简单选择排序的基本思想:给定数组:int[] arr={里面n个数据}:第1趟排序,在待排序数据arr[1]~arr[n]中选出最小的数

常用算法之----选择排序

Java中的经典算法之选择排序(SelectionSort) a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录.基于此思想的算法主要有简单选择排序.树型选择排序和堆排序.(这里只介绍常用的简单选择排序) b) 简单选择排序的基本思想:给定数组:int[] arr={里面n个数据}:第1趟排序,在待排序数据arr[1]~arr[n]中选出最小的数

【排序算法】选择排序(Selection sort)

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