几种排序的原理与实现(二)

3.选择排序

  原理:多次遍历序列,每次从序列中选出一个最大或者最小的记录放在序列的开始位置。例如:对int a[10]中的十个数排序,选择排序的做法是遍历序列发现比a[0]小的数就交换位置,一次遍历后就a[0]就是序列中最小的数了,然后从a[1]开始遍历......最后从a[8]开始遍历就可以得到a[10]的有序数组了。实现如下:

 

void swap(int *a ,int *b)
{
    *a=(*a+*b);
    *b=(*a-*b);
    *a=(*a-*b);
}
int selectsort(int a[] ,int N)
{
    int i,j;
    if(N<-1)
        return 0;
    for(i=0;i<N-1;i++)
    {
        for(j=i+1;j<N;j++)
        {
            if(a[i]>a[j])
            {
                swap(&a[i],&a[j]);
            }
        }
    }
    return 1;
}

4.希尔排序.

  原理:希尔排序也是插入排序的一种。大牛们发现:

1.如果序列“基本有序”的话那样插入排序的话就会有很高的效率

2.如果序列长度N很小的话,插入排序也很高

希尔排序就是从这两点分析改进的插入排序,首先将序列分割为多个子序列,对他们进行插入排序,然后对整体进行一次插入排序。需要注意的是希尔排序的子序列划分不是简单的逐段分割的,而是按照每个增量dK划分的。更具例如对a[10]进行希尔排序,dk

时间: 2024-10-22 07:05:06

几种排序的原理与实现(二)的相关文章

经典的7种排序算法 原理C++实现

经典的7种排序算法 原理C++实现 排序是编程过程中经常遇到的操作,它在很大程度上影响了程序的执行效率. 7种常见的排序算法大致可以分为两类:第一类是低级排序算法,有选择排序.冒泡排序.插入排序:第二类是高级排序算法,有堆排序.排序树.归并排序.快速排序. 一.低级排序算法 1. 选择排序 排序过程:给定一个数值集合,循环遍历集合,每次遍历从集合中选择出最小或最大的放入集合的开头或结尾的位置,下次循环从剩余的元素集合中遍历找出最小的并如上操作,最后直至所有原集合元素都遍历完毕,排序结束. 实现代

十三种基于直方图的图像全局二值化算法原理、实现、代码及效果(转)

十三种基于直方图的图像全局二值化算法原理.实现.代码及效果(转) http://www.cnblogs.com/carekee/articles/3643394.html 图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析.特征提取与模式识别之前的必要的图像预处理过程.这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产生了数以百计的阈值选取方法,但如同其他图像分割算法一样,没有一个现有方法对各种各样的图像都能得到令人满意的结果. 在这些庞大的分

12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用

出处:http://blog.csdn.net/han_xiaoyang/article/details/12163251. 声明:版权所有,转载请注明出处,谢谢. 0.前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比较笨的刷题学的,囧),不过又想了想,算法这东西,博主自己学的过程中一直深感,基础还是非常重要的,很多难题是基础类数据结构和题目的思想综

5种常见排序算法原理&amp;C语言实现

一.冒泡排序(以下各法均以从小到大排序为例,定义len为数组array的长度) 原理:比较相邻元素的大小,对于每次循环,按排序的规则把最值移向数组的一端,同时循环次数依次减少. C代码实现 写法一: //从数组头部开始,某一个元素与其后面的每个元素作比较for(i=0;i<len-1;i++) for(j=i+1;j<len;j++) { if(array[i]>array[j]) { t=array[i];array[i]=array[j];array[j]=t; } } 写法二: /

必须知道的八大种排序算法【java实现】(二) 选择排序,插入排序,希尔算法【详解】

一.选择排序 1.基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换:然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止. 2.实例 3.算法实现 /** * 选择排序算法 * 在未排序序列中找到最小元素,存放到排序序列的起始位置 * 再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾. * 以此类推,直到所有元素均排序完毕. * @param numbers */ public static void selectSort(in

七种机器内部排序的原理与C语言实现,并计算它们的比较次数与移动次数。

内部排序是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 排序是计算机程序设计中的一种重要操作,其功能是对一个数据元素集合或序列重新排列成一个按数据元素某个相知有序的序列.排序分为两类:内排序和外排序. 其中快速排序的是目前排序方法中被认为是最好的方法. 内部排序方法: 1.插入排序(直接插入排序): 2.快速排序: 3.选择排序(简单选择排序): 4.归并排序: 5.冒泡排序: 6.希尔排序(希尔排序是对直接插入排序方法的改进): 7.堆排序: ——摘自百度百科 #ifnd

总结N种排序算法及实现

排序算法是一个简单的问题,但在此问题上却有大量的研究!当前的排序算法通常按照如下四个方面进行分类(或是评价): 1.时间复杂度:一个排序算法的理想性能是O(n).一般而言,好的性能O(nlogn),坏的性能O(n2). 2.空间复杂度(内存使用量) 3.稳定性:稳定的排序算法会让原本有相等键值的记录维持原本的相对次序. 4.排序方式:插入.交换.选择.合并等 一.冒泡排序:这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端. 步骤:1.比较相邻的两个元素,如果第一个比第二个大,就

TreeSet实现自动排序的原理

今天随手了一段代码关于通过treeSet实现自动排序的功能,自己折腾了好久. 始终是存在这一些疑惑,后来和同学的交流和调试可以解释自动排序的基本原理: 通过可以通过两种方式实现自动排序: 一种: package xyxysjxy.io; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io

必须知道的八大种排序算法【java实现】

一.冒泡排序 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端. 冒泡排序的示例: 冒泡排序的算法实现如下:[排序后,数组从小到大排列] /* * 冒泡排序 * 比较相邻的元素.如果第一个比第二个大,就交换他们两个. * 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后