插入排序,这是一个对少量元素进行排序的有效算法。
看代码先:
- #include <iostream>
- #define Max 100
-
- using namespace std;
-
- void Insertion_Sort(int a[],int n)
- {
- for(int j=1;j<n;j++)
- {
- int key=a[j];
- int i=j-1;
- while(i>=0&&a[i]>key)
- {
- a[i+1]=a[i];
- i--;
- }
- a[i+1]=key;
- }
- }
-
- int main()
- {
- int n,a[Max]={0};
- cin>>n;
- for(int i=0;i<n;i++)
- cin>>a[i];
- Insertion_Sort(a,n);
- for(int i=0;i<n;i++)
- cout<<a[i]<<' ';
- cout<<endl;
- system("Pause");
- return 0;
- }
代码分析:
此程序实现对n个整型数据的排序,主要部分为6~19行的Insertion_Sort()函数。在函数中外循环变量j从数组a中的第二个元素(a[1])开始一次向后直到数组最后一个元素(a[n-1]),用变量key记录当前外循环变量j所在元素的值,定义变量i存放j前面一个数的下标,在内循环中,从a[i]开始(刚开始i=j-1)向前依次和key(即外循环j所在位置元素)进行比较,如果a[i]>key,那么就把a[i]移到a[i+1]位置去,然后i向前移动,只要满足内循环条件则重复操作!否则i后面的那个数据存放key值,内循环结束。
操作图解:
![]()
对{5,2,4,6,1,3}这列数字进行排序的步骤如下:
初始状态。
第一步,由于5>2所以交换 (j=1, i=0, a[i]=5, key=2)
由于i<0小循环结束 (j=1, i=-1, key=1)
a[0]=key.
第二步,由于5>4所以交换 (j=2, i=1, a[i]=5, key=4)
由于2<4小循环结束 (j=2, i=0, a[i]=2, key=4)
a[1]=key.
第三步,由于6>5所以不交换 (j=3, i=2, a[i]=5, key=6)
a[3]=key.
第四步,由于6>1所以6向后移 (j=4, i=3, a[3]=6, key=1)
由于5>1所以5向后移 (j=4, i=2, a[2]=5, key=1)
由于4>1所以4向后移 (j=4, i=1, a[1]=4, key=1)
由于2>1所以2向后移 (j=4, i=0, a[0]=2, key=1)
由于i<0小循环结束 (j=4, i=-1, key=1)
a[0]=key.
第五步,由于6>3所以6向后移 (j=5, i=4, a[i]=6, key=3)
由于5>3所以5向后移 (j=5, i=3, a[3]=5, key=3)
由于4>3所以4向后移 (j=5, i=2, a[2]=4, key=3)
由于2<3小循环结束 (j=5, i=1, key=3)
a[2]=key.

0 评论:
发表评论