C/C++10大算法之插入排序

来源:互联网 发布:阿里云企业备案表 编辑:程序博客网 时间:2024/06/05 06:00


插入排序适用于小规模排序,其原理:

下标0,即Array[0]为已排好序的子列,从数组下标1,即第二个元素Array[1]开始,依次与子列相比较,直到当前的排序元素小于子列的元素不成立小于则交换位置),就结束当前排序,进入下一次排序,直到子列长度等于数组长。伪代码:

for (int i =1; i < Length; ++i)

       temp = Array[i];

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

           if (Array[j]>temp)

               Array[j + 1] = Array[j];

               Array[j] = temp;

 

具体实现:

 

//插入排序.cpp:定义控制台应用程序的入口点。

//作者Hecker.ShengTao.Tan

 

#include"stdafx.h"

#include<stdlib.h>

#include<iostream>

#include<time.h>

#include<windows.h>

 

#defineMAX10

 

void Output(intArray[],intLength){

   printf("\n");

   for(inti = 0; i < Length; ++i){     

        printf("%d ",Array[i]);      

   }

   printf("\n\n");

}

 

void Output1(intArray[],intLength,intvalue){

   printf("\n");

   for(inti = 0; i < Length; ++i){

        if(Array[i]==value){

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_GREEN);

            printf("%d ",Array[i]);

            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);

        }

        else{

            printf("%d ",Array[i]);

        }                

   }

   printf("\n\n");

}

void Ran_Array(intArray[],intLength){

   srand((unsigned)time(NULL));

   for(inti = 0; i < Length; ++i){

        Array[i]= rand() % 100;

        if(i>0&&Array[i]==Array[i-1]){

            Array[i]= rand() % 100;

        }

   }

}

 

int Insert_Sort(intArray[],intLength){

   inttemp =NULL;

   for(inti = 1; i < Length; ++i){

        temp= Array[i];

        printf("\n\n%d次排序:\n",i);

        printf("此时:Array[i]=%d\n",Array[i]);

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

            if(Array[j]>temp){

                 printf("此时:Array[j]=%d\n",Array[j]);

                 Array[j+ 1] =Array[j];

                 Array[j]= temp;

                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);

                 Output1(Array,Length,temp);

                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_RED |FOREGROUND_BLUE);

            }           

        }

   }

   return1;

}

 

int main(){

   intArray[MAX];

   intLength =MAX;

   Ran_Array(Array,Length);

   printf("排序前:\n");

   Output(Array,Length);

   Insert_Sort(Array,Length);

   printf("排序完成\n");

   printf("排序后:\n");

   Output(Array,Length);

   system("pause");

   return1;

}

 

0 0
原创粉丝点击