算法学习 - 插入排序,希尔排序
2014-08-02 00:38
337 查看
排序算法
插入排序
插入排序是比较基本的算法,总体的思想来说就是,从头遍历到尾:遍历的时候把当前遍历的元素插入到前面已经遍历过的序列中。下面是插入排序的代码:
//
// 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; }
相关文章推荐
- 算法学习笔记之插入排序
- [算法学习笔记]直接插入排序笔记
- 我的Java开发学习之旅------>Java经典排序算法之二分插入排序
- 数据结构与算法学习之路:直接插入排序
- 学习算法手记【原】- 直接插入排序
- 算法学习记录-排序——希尔排序
- 数据结构与算法——插入类排序(直接插入排序,希尔排序)
- 【算法学习】排序算法 - 插入排序
- 算法系列-直接插入排序和希尔排序
- 【数据结构与算法】内部排序之一:插入排序和希尔排序的N中实现(不断优化,附完整源码)
- 算法学习之:插入排序
- 算法学习1-插入排序
- 减治算法: 插入排序和希尔排序(详解)
- 插入排序的改进算法-希尔排序
- 一步步学习数据结构和算法之直接插入排序效率分析及java实现
- 算法导论 第2章 算法入门(直接插入排序、希尔排序、冒泡排序、合并排序)
- 插入排序算法---插入排序与希尔排序
- 第十六周项目1-验证算法插入排序之希尔排序
- 插入排序算法学习——算法导论学习笔记
- 算法之直接插入排序和希尔排序