直接插入选择排序

#include<iostream>
using namespace std;
void swap(int *a, int *b)
{
    int *c = a;
    a = b;
    b = c;
}
void SelectSort(int *A, int len)
{
    for (int i = 0; i < len; i++)
    {
        int min = i;
        for (int j = i + 1; j < len; j++)
        {
            if (A[j] < A[min])
                min = j;
        }
        if (min != i)
            swap(A[i],A[min]);
    }
}
void InsertSort(int *A, int len)
{
    for (int i = 1; i < len; i++)
    {

        if (A[i] < A[i - 1])
        {
            int tmp = A[i];
            int j = 0;
            for ( j = i - 1; j >= 0 && A[j]>tmp; j--)
                A[j + 1] = A[j];
            A[j + 1] = tmp;
        }
    }
}
int main()
{
    int A[] = {1,5,3,4,0,7};
    int N = sizeof A / sizeof A[0];
    InsertSort(A, N);
    for (int i = 0; i < N; i++)
    {
        cout << A[i] << "  ";
    }
    cout << "\n";
    return 0;
}
时间: 2024-10-03 02:20:35

直接插入选择排序的相关文章

排序算法系列——直接选择排序

前面两篇介绍了两种插入排序算法:直接插入排序和希尔排序.这篇介绍选择排序的一种:直接选择排序.从名字就可以看出直接选择排序与直接插入排序很相似,两者相同点在与都是将待排序序列分成有序区和无序区两部分,不同之处在于直接插入排序是从无序区选出一个插入到有序区合适的位置,而直接选择排序是从无序区选出最小的一个插入到有序区尾部,使得有序区保持有序. 基本思想: 一组待排序的数据,首先将其划分成两部分,一部分是已排好序的,另一部分是待排序的,然后依次从待排序部分取出最小的元素插入到已排序部分的尾部,保证有

白话经典算法系列之四 直接选择排序及交换二个数据的正确实现

分类: 白话经典算法系列 2011-08-09 11:15 16682人阅读 评论(29) 收藏 举报 算法面试c 直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接播放排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后. 设数组为a[0…n-1]. 1.      初始时,数组全为无序区为a[0..n-1].令i=0 2.      在无序区a[i…n-1]中选取一个最小的元素,将其与a[i]交

算法小结-冒泡、选择排序、直接插入排序

1.冒泡排序法:比较相邻的两个元素,如果前边比后边大,就对调两元素,一趟下来,最大的数放在最右边,就像泡泡上升一样. 代码: /* * 冒泡 */ static void bubble_sort(int[] array) { for (int i = 0; i < array.length; i++) { for (int j = i; j < array.length; j++) { if (array[i] > array[j]) { int temp = array[i]; arr

简单选择排序(选择排序)-八大排序三大查找汇总(1)

工作原理: 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 稳定性: 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面). 时间复杂度: 比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+...+1=n*(n-1)/2. 交换次数O(n),最好情况是,已经有序,交换0次:最坏情况下,即待排序记录初始状态是按第一条记录最大

经典(java版)排序算法的分析及实现之三简单选择排序

选择排序-简单选择排序 选择排序的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子系列的最后,直到全部记录排序完毕.简单选择排序也叫直接选择排序. 基本算法: 将给定待排序序列A[0....n],第一次从A[0]~A[n-1]中选取最小值,与A[0]交换,第二次从A[1]~A[n-1]中选取最小值,与A[1]交换,....,第i次从A[i-1]~A[n-1]中选取最小值,与A[i-1]交换,.....,第n-1次从A[n-2]~A[n-1]中选取最小值,与A[n-2]

常见排序算法之选择排序

1.直接选择排序 直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接插入排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后. 设数组为a[0-n-1]. 1.      初始时,数组全为无序区为a[0..n-1].令i=0 2.      在无序区a[i-n-1]中选取一个最小的元素,将其与a[i]交换.交换之后a[0-i]就形成了一个有序区. 3.      i++并重复第二步直到i==n-1.

【排序】选择排序

直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接播放排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后. 设数组为a[0-n-1]. 1.      初始时,数组全为无序区为a[0..n-1].令i=0 2.      在无序区a[i-n-1]中选取一个最小的元素,将其与a[i]交换.交换之后a[0-i]就形成了一个有序区. 3.      i++并重复第二步直到i==n-1.排序完成. voi

直接选择排序及交换二个数据的正确实现

文章参考地址:http://blog.csdn.net/morewindows/article/details/6671824 直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接插入排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后. 设数组为a[0-n-1]. 1.      初始时,数组全为无序区为a[0..n-1].令i=0 2.      在无序区a[i-n-1]中选取一个最小的元素,将其

七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)

 写在前面: 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列.因此排序掌握各种排序算法非常重要.对下面介绍的各个排序,我们假定所有排序的关键字都是整数.对传入函数的参数默认是已经检查好了的.只是简单的描述各个算法并给出了具体实现代码,并未做其他深究探讨. 基础知识: 由于待排序的记录数量不同,使得排序过程中设计的存储器不同,可将排序方法分为两大类:一类是内部排序,指的是待排序记录存放在计算机随机存储器中进行的排序过程.另一类是外部排序,