码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法专题

时间:2016-01-03 21:03:22      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:

数据结构课程可能会考到的排序算法:

插入排序 希尔排序 冒泡法 快排 选择排序 堆排序 归并排序

 

一 插入排序

技术分享
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
void print(int a[], int n ,int i)
{
    cout<<i <<":";
    for(int j= 0; j<8; j++)
    {
        cout<<a[j] <<" ";
    }
    cout<<endl;
}

void InsertSort(int a[], int n)
{
    for(int i= 1; i<n; i++){
        if(a[i] < a[i-1]){               //若第i个元素大于i-1元素,直接插入。小于的话,移动有序表后插入
            int j= i-1;    
            int x = a[i];         //复制为哨兵,即存储待排序元素
            a[i] = a[i-1];           //先后移一个元素
            while(x < a[j]){     //查找在有序表的插入位置
                a[j+1] = a[j];
                j--;         //元素后移
            }
            a[j+1] = x;         //插入到正确位置
        }
        print(a,n,i);            //打印每趟排序的结果
    }
    
}

int main()
{
    int a[8] = {3,1,5,7,2,4,9,6};
    InsertSort(a,8);
    print(a,8,8);
    return 0;
}
插入排序

如图所示为插入过程各元素依次寻找位置

技术分享技术分享

 

 

二 希尔排序

技术分享
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
void print(int a[], int n ,int i)
{
    cout<<i <<":";
    for(int j= 0; j<8; j++)
    {
        cout<<a[j] <<" ";
    }
    cout<<endl;
}
/**
 * 直接插入排序的一般形式
 *
 * @param int dk 缩小增量,如果是直接插入排序,dk=1
 *
 */
void ShellInsertSort(int a[], int n, int dk)
{
    for(int i= dk; i<n; ++i)
    {
        if(a[i] < a[i-dk])             //若第i个元素大于i-1元素,直接插入。小于的话,移动有序表后插入
        {
            int j = i-dk;
            int x = a[i];            //复制为哨兵,即存储待排序元素
            a[i] = a[i-dk];            //首先后移一个元素
            while(x < a[j])         //查找在有序表的插入位置
            {
                a[j+dk] = a[j];
                j -= dk;             //元素后移
            }
            a[j+dk] = x;            //插入到正确位置
        }
        print(a, n,i );
    }

}

/**
 * 先按增量d(n/2,n为要排序数的个数进行希尔排序
 *
 */
void shellSort(int a[], int n)
{

    int dk = n/2;
    while( dk >= 1  )
    {
        ShellInsertSort(a, n, dk);
        dk = dk/2;
    }
}
int main()
{
    int a[8] = {3,1,5,7,2,4,9,6};
    //ShellInsertSort(a,8,1); //直接插入排序
    shellSort(a,8);              //希尔插入排序
    print(a,8,8);
}
希尔排序

希尔排序如图不断缩小比较规模直到相邻比较

技术分享

排序算法专题

标签:

原文地址:http://www.cnblogs.com/dzzy/p/5097043.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!