回覆列表
  • 1 # 使用者4044295222555

    演算法要求:用插入排序法對10個整數進行降序排序。

    演算法分析:將序列分為有序序列和無序列,依次從無序序列中取出元素值插入到有序序列的合適位置。初始是有序序列中只有第一個數,其餘n-1個數組成無序序列,則n個數需進n-1次插入。尋找在有序序列中插入位置可以從有序序列的最後一個數往前找,在未找到插入點之前可以同時向後移動元素,為插入元素準備空間。

    演算法原始碼:

    # include

    main()

    {

    int a[10],i,j,t;

    printf("Please input 10 numbers: ");

    for(i=0;i

    scanf("%d",&a[i]);

    for(i=1;i

    {

    t=a[i]; /*將待插入數暫存於變數t中*/

    for( j=i-1 ; j>=0 && t>a[j] ; j-- ) /*在有序序列(下標0 ~ i-1)中尋找插入位置*/

    a[j+1]=a[j]; /*若未找到插入位置,則當前元素後移一個位置*/

    a[j+1]=t; /*找到插入位置,完成插入*/

    }

    printf("The sorted numbers: ");

    for(i=0;i

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

    printf("\n");

    }

    演算法特點:每趟從無序序列中取出第一個數插入到有序序列的合適位置,元素的最終位置在最後一趟插入後才能確定位置。也可是先用迴圈查詢插入位置(可從前往後或從後往前),再將插入位置之後的元素(有序列中)逐個後移一個位置,最後完成插入。該演算法的特點是在尋找插入位置的同時完成元素的移動。因為元素的移動必須從後往前,則可將兩個操作結合在一起完成,提高演算法效率。仍可進行升序或降序排序。

  • 中秋節和大豐收的關聯?
  • 秋田犬為什麼不太適合餵養?