数据结构-排序(插入排序)

1.直接插入排序算法

 1  //  直接插入排序
 2  // Code by Larman Yuan 2009-6-28
 3 
 4  #include  " stdafx.h "
 5 
 6  void  insertSort( int   *  sortArray,  int  size)
 7  {
 8       int  j;
 9       for ( int  i  =   1 ; i  <  size; i ++ )
10      {
11          j  =  i  -   1 ;
12           int  temp  =  sortArray[i];
13           while (sortArray[j]   >  temp  &&  j  >=   0 )
14          {
15              sortArray[j  +   1 =  sortArray[j];
16              j -- ;
17          }
18           if (j  !=  (i  -   1 ))
19              sortArray[j  +   1 =  temp;
20 
21      }
22  }
23 
24  void  printArray( int  arrayToPrint[], int  size)
25  {
26          for ( int  i  =   0 ; i  <  size; i ++ )
27      {
28          printf( " %d  " , arrayToPrint[i]);
29      }
30      printf( " \n " );
31  }
32  int  _tmain( int  argc, _TCHAR *  argv[])
33  {
34       int   sortArray[ 8 =  { 49 38 65 97 , 76 13 27 49 };
35      printf( " Array before sort:  " );
36      printArray(sortArray,  8 );
37      insertSort(sortArray,  8 );
38          printf( " Array after sort :  " );
39      printArray(sortArray,  8 );
40       return   0 ;
41  }

 运行结果:

Array before sort: 49 38 65 97 76 13 27 49 

Array after sort : 13 27 38 49 49 65 76 97 

 

2.二分插入排序算法

 1  //  二分法插入排序
 2  // Code by Larman Yuan 2009-6-28
 3 
 4  #include  " stdafx.h "
 5 
 6  void  binInsertSort( int *  sortArray,  int  size)
 7  {
 8       int  left, right,middle, i,j, temp;
 9       for (i  =   1 ; i  <  size; i ++ )
10      {
11          temp  =  sortArray[i];
12          left  =   0 ;
13          right  =  i  -   1 ;
14 
15           while (left  <=  right)
16          {
17              middle  =  (left  +  right)  /   2 ;
18               if (temp  <  sortArray[middle])
19                  right  =  middle  - 1 ;
20               else
21                  left  =  middle  +   1 ;
22          }
23 
24           for (j  =  i  -   1 ; j  >=  left; j -- )
25              sortArray[j  +   1 =  sortArray[j];
26           if (left  !=  i)
27              sortArray[left]  =  temp;
28      }
29  }
30 
31  void  printArray( int  arrayToPrint[], int  size)
32  {
33          for ( int  i  =   0 ; i  <  size; i ++ )
34      {
35          printf( " %d  " , arrayToPrint[i]);
36      }
37      printf( " \n " );
38  }
39 
40  int  _tmain( int  argc, _TCHAR *  argv[])
41  {
42       int   sortArray[ 8 =  { 49 38 65 97 , 76 13 27 49 };
43      printf( " Array before sort:  " );
44      printArray(sortArray,  8 );
45      binInsertSort(sortArray,  8 );
46          printf( " Array after sort :  " );
47      printArray(sortArray,  8 );
48       return   0 ;
49  }

运行结果:

Array before sort: 49 38 65 97 76 13 27 49 

Array after sort : 13 27 38 49 49 65 76 97 

 

3.表插入排序算法

 1  //  表插入排序
 2  // Code by larman Yuan 2009-6-28
 3 
 4  #include  " stdafx.h "
 5  #include  < stdlib.h >
 6  struct  Node;
 7  typedef  struct  Node ListNode;
 8  struct  Node
 9  {
10       int  key;
11      ListNode *  next;
12  };
13  typedef ListNode *  LinkList;
14 
15  void  listInsertSort(LinkList  *  palist)
16  {
17      ListNode  *  now,  * pre,  * p,  * q,  * head;
18      head  =   * palist;
19      pre  =  head  -> next;
20      now  =  pre -> next;
21       if (pre  ==  NULL  ||  now  ==  NULL)
22      {
23           return ;
24      }
25       while (now  !=  NULL)
26      {
27          q  =  head;
28          p  =  head -> next;
29           while (p  !=  now  &&  p -> key  <=  now -> key)
30          {
31              q  =  p;
32              p  =  p -> next;
33          }
34           if (p  ==  now)
35          {
36              pre  =  pre -> next;
37              now  =  pre -> next;
38               continue ;
39          }
40          pre -> next  =  now -> next;
41          q -> next  =  now;
42          now -> next  =  p;
43          now  =  pre -> next;
44      }
45  }
46 
47  void  printList(LinkList  *  palist)
48  {
49      ListNode  *  p  =  ( * palist) -> next;
50           while (p  !=  NULL)
51          {
52              printf( " %d  " ,p -> key);
53              p  =  p -> next;
54          }
55          printf( " \n " );
56  }
57 
58  void  insertElement(LinkList  *  palist,  int  value)
59  {
60      ListNode  *  head,  * p,  *  nodeToInsert;
61       if (palist  ==  NULL  ||   * palist  ==  NULL)
62      {
63           return ;
64      }
65      head  =   * palist;
66      p  =  head;
67       while (p -> next  !=  NULL)
68      {
69          p  =  p -> next;
70      }
71      nodeToInsert  =  (ListNode  * )malloc( sizeof ( struct  Node));
72      nodeToInsert -> key  =  value;
73      nodeToInsert -> next  =  NULL;
74      p -> next  =  nodeToInsert;    
75  }
76  int  _tmain( int  argc, _TCHAR *  argv[])
77  {
78        LinkList list  =  (ListNode  * )malloc( sizeof ( struct  Node));
79        list -> next  =  NULL;
80         insertElement( & list, 49 );
81         insertElement( & list, 38 );
82         insertElement( & list, 65 );
83         insertElement( & list, 97 );
84         insertElement( & list, 76 );
85         insertElement( & list, 13 );
86         insertElement( & list, 27 );
87         insertElement( & list, 49 );
88         printf( " List before sort:  " );
89         printList( & list);
90         listInsertSort( & list);
91         printf( " List after  sort:  " );
92         printList( & list);
93       return   0 ;
94  }

运行结果:

 List before sort: 49 38 65 97 76 13 27 49 

List after  sort: 13 27 38 49 49 65 76 97 

 

4.Shell排序算法 

 1  //  shellSort.cpp: 主项目文件。
 2 
 3  #include  " stdafx.h "
 4  #include  < stdio.h >
 5 
 6  using   namespace  System;
 7 
 8  void  shellSort( int *  sortArray,  int  size, int  d)
 9  {
10       int  i, j, increment, temp;
11       for (increment  =  d; increment  >   0 ; increment  /=   2 )
12      {
13           for (i  =  increment; i  <  size; i ++ )
14          {
15              temp  =  sortArray[i];
16              j  =  i  -  increment;
17               while (j  >=   0   &&  temp  <  sortArray[j])
18              {
19                  sortArray[j  +  increment]  =  sortArray[j];
20                  j  -=  increment;
21              }
22              sortArray[j  +  increment]  =  temp;
23          }
24      }
25  }
26 
27  void  printArray( int  arrayToPrint[], int  size)
28  {
29          for ( int  i  =   0 ; i  <  size; i ++ )
30      {
31          printf( " %d  " , arrayToPrint[i]);
32      }
33      printf( " \n " );
34  }
35 
36  int  main(array < System::String  ^>   ^ args)
37  {
38       int  sortArray[ 8 =  { 49 , 38 , 65 , 97 , 13 , 76 , 27 , 49 };
39      printf( " Array before sort:  " );
40      printArray(sortArray,  8 );
41      shellSort(sortArray,  8 4 );
42      printf( " Array after sort:   " );
43      printArray(sortArray,  8 );
44       return   0 ;
45  }

运行结果:

Array before sort: 49 38 65 97 13 76 27 49 

Array after sort:  13 27 38 49 49 65 76 97 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/LarmanYuan/archive/2009/06/28/1512822.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 内容概要 《计算机试卷1》是一份综合性的计算机基础和应用测试卷,涵盖了计算机硬件、软件、操作系统、网络、多媒体技术等多个领域的知识点。试卷包括单选题和操作应用两大类,单选题部分测试学生对计算机基础知识的掌握,操作应用部分则评估学生对计算机应用软件的实际操作能力。 ### 适用人群 本试卷适用于: - 计算机专业或信息技术相关专业的学生,用于课程学习或考试复习。 - 准备计算机等级考试或职业资格认证的人士,作为实战演练材料。 - 对计算机操作有兴趣的自学者,用于提升个人计算机应用技能。 - 计算机基础教育工作者,作为教学资源或出题参考。 ### 使用场景及目标 1. **学习评估**:作为学校或教育机构对学生计算机基础知识和应用技能的评估工具。 2. **自学测试**:供个人自学者检验自己对计算机知识的掌握程度和操作熟练度。 3. **职业发展**:帮助职场人士通过实际操作练习,提升计算机应用能力,增强工作竞争力。 4. **教学资源**:教师可以用于课堂教学,作为教学内容的补充或学生的课后练习。 5. **竞赛准备**:适合准备计算机相关竞赛的学生,作为强化训练和技能检测的材料。 试卷的目标是通过系统性的题目设计,帮助学生全面复习和巩固计算机基础知识,同时通过实际操作题目,提高学生解决实际问题的能力。通过本试卷的学习与练习,学生将能够更加深入地理解计算机的工作原理,掌握常用软件的使用方法,为未来的学术或职业生涯打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值