算法基础之排序(2)--选择排序 改进


 1    /**********************************************************************************************************
2 * Function : test
3 * Create Date : 2014/03/23
4 * Author : NTSK13
5 * Email : [email protected]
6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。
7 任何单位和个人不经本人允许不得用于商业用途
8 转载请注明 转自 http://blog.csdn.net/beijiwei
9 * Version : V0.1
10 * date : 2014/03/23
11 * history : V0.1
12 ***********************************************************************************************************
13
14 算法基础之排序(2)--选择排序 改进
15
16 基本思想: 对待排序的一组数据从前之后进行扫描,若发现相邻的两个数不同时,将这两个数进行交换.
17 升序和降序是同样道理.
18
19 假如待排序的一组数存于array[N],则需要对数组进行N-1次扫描
20
21 第1次扫描: 目标array[0] , 分别和array[1],array[2]...array[N-1] 进行对比,若比array[0]小,则交换.之后array[0]为最小值
22 第2次扫描: 目标array[1] , 分别和array[2],array[3]...array[N-1] 进行对比,若比array[1]小,则交换.之后array[0]为次小值
23 .
24 .
25 .
26 第N-1次扫描: 目标array[N-2] , 和array[N-1] 进行对比,若比array[N-1]小,则交换.之后array[N-1]为最大值.
27 结束.
28
29
30 缺点: 这种方法如果两个数不等,则每次都要交换.
31
32 改进: 在一次扫描时,只记录下标,等该次扫描结束,有改变再交换大小.
33
34 **********************************************************************************************************/
35 #include<stdio.h>
36
37
38 int main()
39 {
40 int i=0,j=0,tmp=0,k=0,array[10]={2,5,6,8,4,3,1,7,9,0};
41
42 printf("Before sort, The element of array is: \n");
43
44 for(i=0;i<10;i++)
45 printf("%d \t",array[i]);
46
47 /*********************************************************************************************************/
48 for(i=0;i<9;i++)
49 {
50 tmp=array[i];
51 k=0;
52 for(j=i+1;j<9;j++)
53 {
54 if(tmp>array[j])
55 {
56 tmp=array[j];
57 k=j;
58 }
59 }
60 if(k!=0)
61 {
62 tmp=array[i];
63 array[i]=array[k];
64 array[k]=tmp;
65 }
66 }
67
68 /*********************************************************************************************************/
69 printf("\n After sort, The element of array is: \n");
70 for(i=0;i<10;i++)
71 printf("%d \t",array[i]);
72
73 printf("\n");
74
75 return 0;
76 }

算法基础之排序(2)--选择排序 改进,码迷,mamicode.com

时间: 2024-12-20 21:37:30

算法基础之排序(2)--选择排序 改进的相关文章

基础算法之排序(2)--选择排序

1 /********************************************************************************************************** 2 * Function : test 3 * Create Date : 2014/03/23 4 * Author : NTSK13 5 * Email : [email protected] 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性

【排序】选择排序算法

特别说明 对于算法,重在理解其思想.解决问题的方法,思路.因此,以下内容全都假定待排序序列的存储结构为:顺序存储结构. 选择排序思想 选择排序又称为简单选择排序,主要思想描述如下: 01.假设待排序列表为 .选择排序将  划分为由已排序好序的  部分 以及 未排序的  部分: 注意:刚开始时  部分其实可认为只有一个元素,即: 元素 02.每次从  部分中选出最小(或最大)的那个元素,将其放在  的末尾位置: 03.重复02步骤,直到  部分为空为止: 编码参考 简单选择排序是非常简单的一种排序

排序算法6--选择排序--简单选择排序

简单选择排序 简单选择排序属于选择排序, 选择排序的思想是:每一趟从待排序的记录中选出关键字最小的记录,按顺序放在以排序的记录序列的后面,知道全部排完为止. 1.简单选择排序法是每次循环找出最值,循环结束后将最值调整到合适位置,交换的次数少. 每次找出当前无序队列中的最小的元素与第一个交换位置,再选择第二小的与第二个交换位置 原始队列:   3 5 6 2 4 1(最小元素1与3交换) 第一步: 1 5 6 2 4 3 (当前最小元素2与5交换) 第二步: 1 2 6 5 4 3 (当前最小元素

十大排序算法之(三)——选择排序

#1,选择排序简介 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面),我个人认为,按照数值来讲,这两个5没差别,所以这是不是决定这个算法不稳定还有待商榷. #2,c++实现算法 #include<iostream>#include&l

简单排序之选择排序算法JAVA实现

选择排序原理 选择排序是一种简单排序算法.这是一个基于位置比较的算法,通常实现是左边是已经排好序的元素列表,右边是待排序的元素.当然,一开始的时候,我们认为都是未经排序的. 选择排序的精髓:与冒泡排序不同,选择排序是第N趟排序先确定最小元素的位置,然后和第N个元素交换位置.主要特点是每一趟选择一个最小值的索引作为梅一堂最后交换的位置.以一个元素个数为N的整形数组arr为例: 第一趟 以第一个元素arr[0]为基准,准备好一个中间变量temp用来记录该趟最小元素的位置,一开始,temp=0,比较a

选择排序—简单选择排序(Simple Selection Sort)

基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. 简单选择排序的示例: 操作方法: 第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换: 第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换: 以此类推..... 第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与

选择排序—简单选择排序(Simple Selection Sort)原理以及Java实现

基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. 简单选择排序的示例: 操作方法: 第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换: 第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换: 以此类推..... 第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与

排序(1)---------选择排序(C语言实现)

选择排序的基本思想: 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 我的通俗解释: ①第一遍先在整个序列中寻找到最小值,将其移到首位,序列被分为1,n-1; ②继续在n-1中寻找最小值,将其移到n-1的首位,也就是整个序列的第二位 ③以此类推,反复操作步骤②,得到结果 选择排序的主要优

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

基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. 操作方法: 第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换: 第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换: 以此类推..... 第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与第i 个记录交换, 直