简单选择排序

简单选择排序

南楼画角 提交于 2019-11-28 20:32:39
思想:通过下标来找数据,每趟排序要找到当前未排序中的最小值,然后把它放到该放置的位置,数据交换的位置发生n-1。 由于每次交换是未排序中的最小值插入到以排序的后面,那么已经排序后面的那个未排序的坑就要让出来,和为排序中 的最小值位置发生交换,这样就可能改变数据的相对大小位置,所以是一种不稳定的排序 public class simple_sort { public static void main(String[] args) { int a[]={1,7,3,9,0,4,5,6}; int b[]=a; for(int i=0;i<a.length;i++) System.out.print(a[i]+" "); System.out.println(); sort(a); for(int i=0;i<a.length;i++) System.out.print(a[i]+" "); System.out.println(); } public static void sort(int a[]){ int temp; int index; for(int i=0;i<a.length-1;i++){ temp=a[i]; index=i; for(int j=i+1;j<a.length;j++){ if(a[index]>a[j]) { index = j; } } a[i]

排序——简单选择排序

两盒软妹~` 提交于 2019-11-28 20:00:44
一、选择排序概念 选择排序(Selection Sort)的基本思想:对n个记录进行扫描,选择最小的记录,将其输出,接着在剩下的n-1个记录中扫描,选择最小的记录将其输出……不断重复这个过程,直到只剩一个记录为止,即可完成数据从小到大的排序过程。 提示:如果要求数据按从大到小排序,则每次扫描时选择最大的记录即可。 选择排序常用的算法有:简单选择排序和堆排序,本文介绍简单选择排序法, 简单选择排序法类似人的排序习惯:从数据中选择最小(或最大)的一个数据,然后将该数与第1个数交换,接下来从剩下数据中选择最小(或最大)的一个数,第2个数进行交换……这样重复下去,直到只剩下一个数据为止。 下面以一组待排序的数据演示简单选择排序的过程,假设有8个需要排序的数据序列如下所示: 69,65,90,37,92,6,28,54 使用简单选择排序法进行排序的过程如下图所示。 首先对数组中的原始数据进行扫描,找到最小的一个数6,与第1个元素69进行交换,完成第一遍选择排序的结果,然后不断重复这个过程,到第7遍扫描后,完成整个数据序列的排序。 注意:在简单选择排序法中,某一遍扫描没有数据交换并不能说明数据就已经按顺序排好了,还必须进行后续的扫描。 二、简单选择排序法的实现 (1)实现 void SelectSort(int a[], int n) { int i, j, t, k; for (i=0; i

简单排序——冒泡、选择、插入

≡放荡痞女 提交于 2019-11-28 07:39:50
冒泡排序:它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 选择排序:选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 插入排序:插入排序(Insertion sort)是一种简单直观且稳定的排序算法。如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。 package com

20180321选择排序-简单选择排序

白昼怎懂夜的黑 提交于 2019-11-27 13:59:50
前置知识 selection sort 选择排序的 基本思想 :从待排序的序列中选出最大值(最小值),交换该元素与待排序序列头部元素,直到所有待排序的数据元素排序完毕为止。 可以复习下直接插入排序 本期内容 名词解释 简单选择排序 将待排序序列视为两部分 一部分是: 有序序列 ,为空。 另一部分是: 待排序数列 ,整个序列。 核心操作 在于最值的选择。 实现 时间复杂度O(n*n),双层for循环 不稳定的算法 void SelectSort(int arr[],int n) { int i, j,max; for(i=1;i<n;i++) { max = i;// 定义当前下标为最小值下标 for(j=1;j<n;j++) //查找最大值,并记录其下标 { if(arr[max] < arr[j]) max = j; } // 若i不等于max,说明找到最大值,进行交换 if(i!=max) { swap(&arr[i],&arr[max]); } } } 总体评价 比较好理解的算法 代码学习 履历 20180321整理,算法比较简单,主要在 稳定不稳定方面,没太理解。 来源: oschina 链接: https://my.oschina.net/u/111698/blog/1648804

简单选择排序

会有一股神秘感。 提交于 2019-11-27 03:45:55
简单选择排序: 排序方法:在待排序的数据中选择最小值放到最前面 简单选择排序示例: 初始 关键字 第一趟 排序后 第二趟 排序后 第三趟 排序后 第四趟 排序后 第五趟 排序后 第六趟 排序后 第七趟 排序后 49 13 13 13 13 13 13 13 38 38 27 27 27 27 27 27 65 65 65 38 38 38 38 38 97 97 97 97 49 49 49 49 76 76 76 76 76 49 49 49 13 49 49 49 97 97 65 65 27 27 38 65 65 65 97 76 49 49 49 49 49 76 76 97 代码实现: 说明:本博客的代码实现贴近数据结构(C语言版) 课本代码风格,使用抽象数据类型。 项目结构 以下文件代码与直接插入排序时所用相同,为避免大量代码重复此处不再附上。 详情可参考直接插入排序: https://blog.csdn.net/ZipayYu/article/details/98245056 status.h ststus.cpp SequenceListType.h SequenceListType.cpp 简单选择排序的实现 /************************************ * 函数名称: SelectMinKey * 函数说明: 在L.r[start

选择排序之简单选择排序

此生再无相见时 提交于 2019-11-26 06:39:27
简单选择排序 什么是简单选择排序: 简单选择排序就是在未排序的序列中,找出其中最小的元素和首位元素进行交换, 接下来在剩下的未曾进行排序的记录序列中再选出最小的元素和序列记录中的第二位置的元素进行交换, ......如此类推,就可以实现从小到大的已排序序列。 代码实现 # include <stdio.h> void Swap ( int * a , int * b ) ; void SimpleSelectionSort ( int arr [ ] , int length ) ; void PrintSort ( int arr [ ] , int length ) ; int main ( ) { int arr [ 10 ] = { 1 , 9 , 6 , 7 , 8 , 9 , 4 , 8 , 1 , 4 } ; SimpleSelectionSort ( arr , 10 ) ; PrintSort ( arr , 10 ) ; return 0 ; } void Swap ( int * a , int * b ) { int temp = * a ; * a = * b ; * b = temp ; } void SimpleSelectionSort ( int arr [ ] , int length ) { int i , j , min ; for ( i

简单选择排序

梦想与她 提交于 2019-11-26 01:28:50
简单选择排序 基本思想 代码示例 java示例 基本思想 从所有元素中找出最小的与第0个元素交换;然后从第一个元素往后找出最小的与第一个元素交换;依次类推,直到最后。 代码示例 java示例 public void selectionSort(int[] a){ for(int i = 0; i < a.length - 1; i++){ int minIndex = i; for(int j = i + 1; j < a.length; j++){ if(a[minIndex] > a[j]) minIndex = j; } int temp = a[i]; a[i] = a[minIndex]; a[minIndex] = temp; } } 来源: https://blog.csdn.net/rainyRs/article/details/98743153