算法学习 - 插入排序,希尔排序

来源:互联网 发布:丰田车导航软件 编辑:程序博客网 时间:2024/05/17 04:13

排序算法

插入排序

插入排序是比较基本的算法,总体的思想来说就是,从头遍历到尾:遍历的时候把当前遍历的元素插入到前面已经遍历过的序列中。
下面是插入排序的代码:


////  main.cpp//  insertSort////  Created by Alps on 14-8-1.//  Copyright (c) 2014年 chen. All rights reserved.//#include <iostream>using namespace std;void insertSort(int *A, int length){    int i = 0,j = 0;    for (i = 0; i < length; i++) {        int tmp = A[i];        for (j = i; j > 0 && A[j-1] > tmp; j--) {            A[j] = A[j-1];        }        A[j] = tmp;    }}int main(int argc, const char * argv[]){    int A[] = {34,8,64,51,32,21};    int length = sizeof(A)/sizeof(int);    insertSort(A, length);    for (int i = 0; i < length; i++) {        printf("%d ",A[i]);    }    printf("\n");    return 0;}


希尔排序

希尔排序是和插入排序感觉比较像的,但是仅仅相像在交换元素上,希尔排序是增量的排序算法,一般的增量为N/2. 不断缩小到1.
下面是代码:


////  main.cpp//  shellSort////  Created by Alps on 14-8-1.//  Copyright (c) 2014年 chen. All rights reserved.//#include <iostream>using namespace std;void shellSort(int *A, int length){    int i = 0;    int j = 0;    for (int increment = length/2; increment > 0; increment /=2) {        for (i = increment; i < length; i++) {            int tmp = A[i];            for (j = i; j >= increment; j-=increment) {                if (tmp < A[j - increment]) {                    A[j] = A[j-increment];                }else{                    break;                }            }            A[j] = tmp;        }    }}int main(int argc, const char * argv[]){    int A[]={81,94,11,96,12,35,17,95,28,58,41,75,15};    int length = sizeof(A)/sizeof(int);    shellSort(A, length);    for (int i = 0; i < length; i++) {        printf("%d ",A[i]);    }    printf("\n");    return 0;}


0 0