background image

 

合适的位置 */
          {
               input[j + 1] = input[j]; /* 

 

一边找一边移动元素 */

               input[j] = temp;
          }
     }
}

 

四.带哨兵的直接排序法

 /**
     * 带哨兵的直接插入排序,数组的第一个元素不用于存储有效数据
     * 将 input[0]作为哨兵,可以避免判定 input[j]中,数组是否越界
     * 因为在 j--的过程中,当 j 减小到 0 时,变成了 input[0]与 input[0]
     * 自身进行比较,很明显这个时候说明位置 i 之前的数字都比 input[i]小
     * 位置 i 上的数字不需要移动,直接进入下一轮的插入比较。
     *
     */
void InsertionSortWithPiquet(int input[],int len) 
{
     int i,j;
     for (i = 2; i < len; i++)  /* 保证数组 input 第一元素的存储数据无效,从第二个数

 

据开始与它前面的元素比较 */
     {
          input[0] = input[i];
          for (j = i - 1; input[j] > input[0] ; j--) 
          {
               input[j + 1] = input[j];
               input[j] = input[0]; /* input[j]

 

一直都是排序的元素中最大的那一个 */

          }
     }
}

 

五.冒泡法

/* 

 

冒泡排序法 */

void Bublesort(int a[],int n)
{
     int i,j,k;
     for(j=0;j<n;j++)   /* 气泡法要排序 n 次*/