您的位置:首页 > 其它

直接插入排序

2014-04-30 18:00 141 查看

基本思想


插入排序的基本思想就是:每次将一个待排序的记录,按照其关键字大小插入到已经排好序的子序列的适当位子,知道全部记录插入完成为止。

假设待排序的记录都存储在R
中,首先把R[1]自成一个有序区,R[2..n]为无序区,然后将R[2..n]中的记录依次插入到R[1..i]中,直到生成含有n个记录的有序区。

在插入的某一中间时刻,存在两个区,一个是R[1..i-1]有序区,一个R[i..n]无序待排序的区。

代码:

/***********************************************
直接插入排序算法
insert_sort.cpp
Created by Summer_ZJU
2014.04.30
Copyright (c) 2014 ZJU.All rights reserved.
************************************************/
#include<iostream>
#include <iomanip>
using namespace std;

void insert_sort(int a[],int n)//插入排序、升序
{
int temp;
int i,j;
for (i=1;i<n;i++)//a[0]是第一个有序区的值,所以从a[1]开始
{
temp=a[i];//哨兵
j=i-1;
while (j>=0 && temp<a[j])
{
a[j+1]=a[j];//将关键字大于temp的记录后移一位
j--;//顺序往前遍历
}
a[j+1]=temp;//将关键字插入正确的位置
}
}

int main()
{
int arr[]={3,1,5,4,2,9,7,8,6};
int len=sizeof(arr)/sizeof(arr[0]);//计算数组中元素的个数
cout<<"原数组序列:"<<endl;
for (int i=0;i<len;i++)
cout<<arr[i]<<" ";

cout<<endl<<"插入排序后:"<<endl;
insert_sort(arr,len);
for (int i=0;i<len;i++)
cout<<arr[i]<<" ";
cout<<endl;
system("pause");
return 0;
}
运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: