插入排序

来源:互联网 发布:南京行知基地学农宿舍 编辑:程序博客网 时间:2024/05/17 08:21
// 插入排序法.cpp : 定义控制台应用程序的入口点。////假定这个数组的序是排好的,然后从头往后,如果有数比当前外层元素的值大,则将这个数的位置往后挪,//直到当前外层元素的值大于或等于它前面的位置为止.这具算法在排完前k个数之后,可以保证a[1…k]是局部有序的,保证了插入过程的正确性.
    //算法描述:    //⒈ 从第一个元素开始,该元素可以认为已经被排序    //⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描    //⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置    //⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置    //⒌ 将新元素插入到下一位置中    //⒍ 重复步骤2#include "stdafx.h"#include <stdlib.h>#include <time.h>#include <stdio.h>#define N 10void InsertionSort(int a[], int n);int _tmain(int argc, _TCHAR* argv[]){    int array[N] = {0};    srand((unsigned)time(NULL));    for (int i = 0; i < N; ++i) {        array[i] = rand() % 100 + 1;    }    InsertionSort(array, N);    for (int i = 0; i < N; ++i) {        printf("%d\t", array[i]);    }    return 0;}void InsertionSort(int a[], int n) {    for (int j = 1; j < n; ++j) {        int key = a[j];        int i = j - 1;        while (i >= 0 && a[i] > key) {//不能写成 a[i] > a [j]  a[j]是在不停变动的            a[i+1] = a[i];//不能写成  a[j] = a[i];因为i要向前递减排序。            i--;        }        a[i+1] = key;    }}

原创粉丝点击