插入排序
来源:互联网 发布:南京行知基地学农宿舍 编辑:程序博客网 时间: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; }}