您的位置:首页 > 运维架构 > Linux

linux中使用dd命令进行硬盘对刻

2011-09-05 10:41 155 查看
昨晚看了一下数据结构发现都忘了!嘿嘿!(本来学的就不好!呵呵!)

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

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

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

2.算法分析


void lnsertSort(SeqList R)


{ //对顺序表R中的记录R[1..n]按递增序进行插入排序


int i,j;


for(i=2;i<=n;i++) //依次插入R[2],…,R


if(R[i].key<R[i-1].key){//若R[i].key大于等于有序区中所有的

//keys,则R[i] 应在原有位置上


R[0]=R[i];j=i-1; //R[0]是哨兵,且是R[i]的副本


do{ //从右向左在有序区R[1..i-1]中查找R[i]的插入位置


R[j+1]=R[j]; //将关键字大于R[i].key的记录后移


j-- ;


}while(R[0].key<R[j].key); //当R[i].key≥R[j].key时终止


R[j+1]=R[0]; //R[i]插入到正确的位置上


}//endif


}//InsertSort

哨兵的作用
 算法中引进的附加记录R[0]称监视哨或哨兵(Sentinel)。
  哨兵有两个作用:
  ① 进人查找(插入位置)循环之前,它保存了R[i]的副本,使不致于因记录后移而丢失R[i]的内容;
  ② 它的主要作用是:在查找循环中"监视"下标变量j是否越界。一旦越界(即j=0),因为R[0].key和自己比较,循环判定条件不成立使得查找循环结 束,从而避免了在该循环内的每一次均要检测j是否越界(即省略了循环判定条件"j>=1")。

实现:


#include <iostream.h>




void IntSort(int A[],int n)


{


int x,i,j;




for(i=1;i<n;i++)


{


x = A[i];


for(j= i-1;j>=0;j--)


{


if(x<A[j])


A[j+1] = A[j];


else


break;


}


A[j+1] = x;


}


}


int main()


{


int a[] = {12,34,13,456,1,95,5};


IntSort(a,7);


for(int i= 0; i<7;i++)


{


cout<<a[i]<<" "<<endl;


}


}



一个简单的例子:
a[]={5,8,7}

当i=2时要插入的是7,外层for循环将7 赋给x,而内层循环a[2]<a[1]所以把a[1]赋给a[2] 然后在内层的第二次循环结束时把a[2]的值赋给a[1],排序完毕!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: