程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 常用排序算法 總結

常用排序算法 總結

編輯:C++入門知識

1. 直接插入排序

2. 折半插入排序

3. 冒泡排序

4. 簡單選擇排序

5. 希爾排序

6. 快速排序

7. 堆排序

8. 二路歸並排序

 

 

[cpp]  // Sort.cpp : Defines the entry point for the console application.  
//  
 
#include "stdafx.h"  
#include "stdio.h"  
#include "iostream"  
 
using namespace std; 
// Straight insert sort  
void InsertSort(int *arr,int length); 
void InsertSort2(int arr[], int length); 
 
// Binary Insert Sort  
void BinInsertSort(int arr[], int length); 
 
// Shell Sort  
void ShellSort(int *arr,int length); 
// Shell Sort 2  
void ShellSort2(int *arr,int length); 
 
// Bubble Sort  
void BubbleSort(int *arr,int length); 
 
// Quick Sort  
void QuickSort(int *arr, int low, int high); 
// Partition  
int Partition(int *arr, int low, int high); 
 
// Simple Selection Sort  
void SimpleSelectionSort(int *arr, int length); 
 
// HeapAdjust  
void HeapAdjust(int *arr, int s,int end); 
 
// Heap Sort,小根堆  
void HeapSort(int *arr,int length); 
// Merge Array  
void Merge(int *arr, int *arr2, int left, int mid, int right); 
// Merge Sort  
void MergeSort(int *arr, int *arr2, int left, int right); 
 
int _tmain(int argc, _TCHAR* argv[]) 

    int arr[]={29,5,44,28,36,42,7,5,88,9,10}; 
    int length=sizeof(arr)/sizeof(*arr); 
    InsertSort(arr,length); 
    printf("Straight Insert Sort:\n"); 
    printf("total number:%4d\n",length); 
    printf("sorted result:\n"); 
    for (int i=0;i<length;i++) 
    { 
        printf("%5d",arr[i]); 
    } 
    cout<<endl; 
 
    // test2  
    int arr2[]={29,5,44,28,36,42,7,5,88,9,10}; 
    length=sizeof(arr2)/sizeof(*arr2); 
    InsertSort2(arr2,length); 
    printf("Straight Insert Sort:\n"); 
    printf("total number:%4d\n",length); 
    printf("sorted result:\n"); 
    for (int i=0;i<length;i++) 
    { 
        printf("%5d",arr2[i]); 
    } 
    cout<<endl; 
 
    // test3  
    int arr3[]={29,5,44,28,36,42,7,5,88,9,10}; 
    length=sizeof(arr3)/sizeof(*arr3); 
    BinInsertSort(arr3,length); 
    printf("Binary Insert Sort:\n"); 
    printf("total number:%4d\n",length); 
    printf("sorted result:\n"); 
    for (int i=0;i<length;i++) 
    { 
        printf("%5d",arr3[i]); 
    } 
    cout<<endl; 
 
    // test4  
    int arr4[]={29,5,44,28,36,42,7,5,88,9,10}; 
    length=sizeof(arr4)/sizeof(*arr4); 
    ShellSort(arr4,length); 
    printf("Shell Sort:\n"); 
    printf("total number:%4d\n",length); 
    printf("sorted result:\n"); 
    for (int i=0;i<length;i++) 
    { 
        printf("%5d",arr4[i]); 
    } 
    cout<<endl; 
 
    // test5  
    int arr5[]={29,5,44,28,36,42,7,5,88,9,10}; 
    length=sizeof(arr5)/sizeof(*arr5); 
    ShellSort2(arr5,length); 
    printf("Shell Sort 2:\n"); 
    printf("total number:%4d\n",length); 
    printf("sorted result:\n"); 
    for (int i=0;i<length;i++) 
    { 
        printf("%5d",arr5[i]); 
    } 
    cout<<endl; 
 
    // test6  
    int arr6[]={29,5,44,28,36,42,7,5,88,9,10}; 
    length=sizeof(arr6)/sizeof(*arr6); 
    BubbleSort(arr6,length); 
    printf("Bubble Sort:\n"); 
    printf("total number:%4d\n",length); 
    printf("sorted result:\n"); 
    for (int i=0;i<length;i++) 
    { 
        printf("%5d",arr6[i]); 
    } 
    cout<<endl; 
 
     
 
    // test7  
    int arr7[]={29,5,44,28,36,42,7,5,88,9,10}; 
    length=sizeof(arr7)/sizeof(*arr7); 
    QuickSort(arr7,0,length-1); 
    printf("Quick Sort:\n"); 
    printf("total number:%4d\n",length); 
    printf("sorted result:\n"); 
    for (int i=0;i<length;i++) 
    { 
        printf("%5d",arr7[i]); 
    } 
    cout<<endl; 
 
    // test8  
    int arr8[]={29,5,44,28,36,42,7,5,88,9,10}; 
    length=sizeof(arr8)/sizeof(*arr8); 
    SimpleSelectionSort(arr8,length); 
     
    printf("Simple Selection Sort:\n"); 
    printf("total number:%4d\n",length); 
    printf("sorted result:\n"); 
    for (int i=0;i<length;i++) 
    { 
        printf("%5d",arr8[i]); 
    } 
    cout<<endl; 
 
    // test9, 對於堆的應用,數組arr[0]暫時不用,降低處理復雜度  
    int arr9[]={0,29,5,44,28,36,42,7,5,88,9,10}; 
    length=sizeof(arr9)/sizeof(*arr9)-1; 
    HeapSort(arr9,length); 
    printf("///////////////////////////////////////////////////////////////////////\n"); 
    printf("Heap Sort:\n"); 
    printf("total number:%4d\n",length); 
    printf("sorted result:\n"); 
    for (int i=length;i>=1;i--) 
    { 
        printf("%5d",arr9[i]); 
    } 
    cout<<endl; 
 
    // test10  
    int arr10[]={29,5,44,28,36,42,7,5,88,9,10}; 
    length=sizeof(arr10)/sizeof(*arr10); 
    int * arr10_2=new int[length]; 
    MergeSort(arr10,arr10_2,0,length-1); 
    printf("///////////////////////////////////////////////////////////////////////\n"); 
    printf("Merge Sort:\n"); 
    printf("total number:%4d\n",length); 
    printf("sorted result:\n"); 
    for (int i=0;i<length;i++) 
    { 
        printf("%5d",arr10[i]); 
    } 
    cout<<endl; 
 
    system("pause"); 
    return 0; 

 
// 由小到大排序  
// Straight Insert Sort  
void InsertSort(int *arr,int length) 

    for (int i=1;i<length;i++) 
    { 
        if (arr[i]<arr[i-1]) // 需要將arr[i]插入到已排序的列表中   
        { 
            int temp=arr[i]; 
            int j=0; 
            for (j=i-1;j>=0;j--) 
            { 
                if (temp<arr[j]) 
                { 
                    arr[j+1]=arr[j]; 
                } 
                else 
                { 
                    break; 
                } 
            } 
            arr[j+1]=temp; 
        } 
    } 

 
// Straight Insert Sort 2  
void InsertSort2(int arr[], int length) 

    for (int i=1;i<length;i++) 
    { 
        if (arr[i]<arr[i-1]) // 需要進行插入  
        { 
            int temp=arr[i]; 
            int j=i-1; 
            do  
            { 
                arr[j+1]=arr[j]; 
                j--; 
            } while (j>=0&&temp<arr[j]); 
            arr[j+1]=temp; 
        } 
    } 

 
// Binary Insert Sort  
void BinInsertSort(int arr[], int length) 

    for (int i=1;i<length;i++) 
    { 
        if (arr[i]<arr[i-1]) // 需要插入到有序序列中  
        { 
            int temp=arr[i]; 
            int low=0; 
            int high=i-1; 
            while(low<=high) 
            { 
                int mid=(low+high)/2; 
                if (temp<mid) 
                { 
                    high=mid-1; 
                } 
                else if (temp>mid) 
                { 
                    low=mid+1; 
                } 
                else 
                { 
                    low=mid+1; 
                    break; 
                } 
            } 
            for(int j=i-1;j>=low;j--) 
            { 
                arr[j+1]=arr[j]; 
            } 
            arr[low]=temp; 
        } 
    } 

 
// Shell Sort  
void ShellSort(int *arr,int length) 

    // Shell Sort  
    int gap=length; // 初始化子序列的間隔  
    do  
    { 
        gap=gap/3+1; 
        for (int i=0+gap;i<length;i++) //判斷每個子序列   
        { 
            if (arr[i]<arr[i-gap]) // 需要插入到已排序的子序列  
            { 
                int temp=arr[i]; 
                int j=0; 
                for (j=i-gap;j>=0;j=j-gap) 
                { 
                    if (temp<arr[j]) 
                    { 
                        arr[j+gap]=arr[j]; 
                    } 
                    else 
                    { 
                        break; 
                    } 
                } 
                arr[j+gap]=temp; 
            } 
        } 
    } while (gap>1); 

 
// Shell Sort 2  
void ShellSort2(int *arr,int length) 

    int gap=length; 
    do  
    { 
        gap=gap/3+1; 
        for (int i=0+gap;i<length;i++) 
        { 
            if (arr[i]<arr[i-gap]) 
            { 
                int temp=arr[i]; 
                int j=i-gap; 
                do  
                { 
                    arr[j+gap]=arr[j]; 
                    j=j-gap; 
                } while (j>=0&&temp<arr[j]); 
                arr[j+gap]=temp; 
            } 
        } 
    } while (gap>1); 

 
// Bubble Sort  
void BubbleSort(int *arr,int length) 

    bool exchange=false; 
    for (int i=0;i<length-1;i++) 
    { 
        exchange=false; 
        for (int j=length-1;j>=i+1;j--) 
        { 
            if (arr[j]<arr[j-1]) // 需要交換  
            { 
                exchange=true; 
                int temp=arr[j-1]; 
                arr[j-1]=arr[j]; 
                arr[j]=temp; 
            } 
        } 
        if (exchange==false) 
        { 
            return; 
        } 
    } 

 
// Quick Sort  
void QuickSort(int *arr, int low, int high) 

    if (low<high) 
    { 
        int pivocLoc=Partition(arr,low,high); 
        QuickSort(arr,low,pivocLoc-1); 
        QuickSort(arr,pivocLoc+1,high); 
    } 

 
// Partition  
int Partition(int *arr, int low, int high) 

    int pivotKey=arr[low]; // 記錄樞軸  
    while(low<high) 
    { 
        while(low<high&&arr[high]>=pivotKey) --high; 
        int temp=arr[high];arr[high]=arr[low];arr[low]=temp; 
        while(low<high&&arr[low]<pivotKey) ++low; 
        temp=arr[high];arr[high]=arr[low];arr[low]=temp; 
    } 
    return low; 

 
// Simple Selection Sort  
void SimpleSelectionSort(int *arr, int length) 

    //  
    for (int i=0;i<length;i++) 
    { 
        int index=i; 
        for(int j=i+1;j<length;j++) 
        { 
            if (arr[j]<arr[index]) 
            { 
                index=j; 
            } 
        } 
        if(index!=i) 
        { 
            // exchange  
            int temp=arr[i]; 
            arr[i]=arr[index]; 
            arr[index]=temp; 
        } 
    } 

 
// Heap Sort,小根堆  
void HeapSort(int *arr,int length) 

    // 調整數組生成小根堆  
    for (int i=length/2;i>=1;i--) 
    { 
        HeapAdjust(arr,i,length); 
    } 
    for (int i=length;i>1;--i) 
    { 
        // 交換堆頭的元素和最後一個  
        int temp=arr[1]; 
        arr[1]=arr[i]; 
        arr[i]=temp; 
 
        // 重新調整堆為小根堆  
        HeapAdjust(arr,1,i-1); 
    } 

 
// HeapAdjust  
void HeapAdjust(int *arr, int s,int end) 

    int rloc=arr[s]; 
    for (int j=2*s;j<=end;j=j*2) 
    { 
        if (j<end&&arr[j]>arr[j+1]) 
        { 
            j++; // 找到兩個兄弟節點中最小的節點  
        } 
        if (!(arr[j]<rloc)) 
        { 
            break; 
        } 
        arr[s]=arr[j]; 
        s=j; 
    } 
    arr[s]=rloc; 

 
// Merge Sort  
void MergeSort(int *arr, int *arr2, int left, int right) 

    if (left==right) 
    { 
        arr2[left]=arr[left]; 
        return; 
    } 
    if (left<right) 
    { 
        int mid=(left+right)/2; 
        MergeSort(arr,arr2,left,mid); 
        MergeSort(arr,arr2,mid+1,right); 
        Merge(arr,arr2,left,mid,right); 
    } 

 
// Merge Array  
void Merge(int *arr, int *arr2, int left, int mid, int right) 

    // 將數組保存到暫存空間中  
    for (int k=left;k<=right;k++) 
    { 
        arr2[k]=arr[k]; 
    } 
    int s1=left; 
    int s2=mid+1; 
    int t=left; 
    while(s1<=mid&&s2<=right) 
    { 
        if (arr2[s1]<=arr2[s2]) 
        { 
            arr[t++]=arr2[s1++]; 
        } 
        else 
        { 
            arr[t++]=arr2[s2++]; 
        } 
    } 
    while(s1<=mid) arr[t++]=arr2[s1++]; 
    while(s2<=right) arr[t++]=arr2[s2++]; 

// Sort.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"
#include "iostream"

using namespace std;
// Straight insert sort
void InsertSort(int *arr,int length);
void InsertSort2(int arr[], int length);

// Binary Insert Sort
void BinInsertSort(int arr[], int length);

// Shell Sort
void ShellSort(int *arr,int length);
// Shell Sort 2
void ShellSort2(int *arr,int length);

// Bubble Sort
void BubbleSort(int *arr,int length);

// Quick Sort
void QuickSort(int *arr, int low, int high);
// Partition
int Partition(int *arr, int low, int high);

// Simple Selection Sort
void SimpleSelectionSort(int *arr, int length);

// HeapAdjust
void HeapAdjust(int *arr, int s,int end);

// Heap Sort,小根堆
void HeapSort(int *arr,int length);
// Merge Array
void Merge(int *arr, int *arr2, int left, int mid, int right);
// Merge Sort
void MergeSort(int *arr, int *arr2, int left, int right);

int _tmain(int argc, _TCHAR* argv[])
{
 int arr[]={29,5,44,28,36,42,7,5,88,9,10};
 int length=sizeof(arr)/sizeof(*arr);
 InsertSort(arr,length);
 printf("Straight Insert Sort:\n");
 printf("total number:%4d\n",length);
 printf("sorted result:\n");
 for (int i=0;i<length;i++)
 {
  printf("%5d",arr[i]);
 }
 cout<<endl;

 // test2
 int arr2[]={29,5,44,28,36,42,7,5,88,9,10};
 length=sizeof(arr2)/sizeof(*arr2);
 InsertSort2(arr2,length);
 printf("Straight Insert Sort:\n");
 printf("total number:%4d\n",length);
 printf("sorted result:\n");
 for (int i=0;i<length;i++)
 {
  printf("%5d",arr2[i]);
 }
 cout<<endl;

 // test3
 int arr3[]={29,5,44,28,36,42,7,5,88,9,10};
 length=sizeof(arr3)/sizeof(*arr3);
 BinInsertSort(arr3,length);
 printf("Binary Insert Sort:\n");
 printf("total number:%4d\n",length);
 printf("sorted result:\n");
 for (int i=0;i<length;i++)
 {
  printf("%5d",arr3[i]);
 }
 cout<<endl;

 // test4
 int arr4[]={29,5,44,28,36,42,7,5,88,9,10};
 length=sizeof(arr4)/sizeof(*arr4);
 ShellSort(arr4,length);
 printf("Shell Sort:\n");
 printf("total number:%4d\n",length);
 printf("sorted result:\n");
 for (int i=0;i<length;i++)
 {
  printf("%5d",arr4[i]);
 }
 cout<<endl;

 // test5
 int arr5[]={29,5,44,28,36,42,7,5,88,9,10};
 length=sizeof(arr5)/sizeof(*arr5);
 ShellSort2(arr5,length);
 printf("Shell Sort 2:\n");
 printf("total number:%4d\n",length);
 printf("sorted result:\n");
 for (int i=0;i<length;i++)
 {
  printf("%5d",arr5[i]);
 }
 cout<<endl;

 // test6
 int arr6[]={29,5,44,28,36,42,7,5,88,9,10};
 length=sizeof(arr6)/sizeof(*arr6);
 BubbleSort(arr6,length);
 printf("Bubble Sort:\n");
 printf("total number:%4d\n",length);
 printf("sorted result:\n");
 for (int i=0;i<length;i++)
 {
  printf("%5d",arr6[i]);
 }
 cout<<endl;

 

 // test7
 int arr7[]={29,5,44,28,36,42,7,5,88,9,10};
 length=sizeof(arr7)/sizeof(*arr7);
 QuickSort(arr7,0,length-1);
 printf("Quick Sort:\n");
 printf("total number:%4d\n",length);
 printf("sorted result:\n");
 for (int i=0;i<length;i++)
 {
  printf("%5d",arr7[i]);
 }
 cout<<endl;

 // test8
 int arr8[]={29,5,44,28,36,42,7,5,88,9,10};
 length=sizeof(arr8)/sizeof(*arr8);
 SimpleSelectionSort(arr8,length);
 
 printf("Simple Selection Sort:\n");
 printf("total number:%4d\n",length);
 printf("sorted result:\n");
 for (int i=0;i<length;i++)
 {
  printf("%5d",arr8[i]);
 }
 cout<<endl;

 // test9, 對於堆的應用,數組arr[0]暫時不用,降低處理復雜度
 int arr9[]={0,29,5,44,28,36,42,7,5,88,9,10};
 length=sizeof(arr9)/sizeof(*arr9)-1;
 HeapSort(arr9,length);
 printf("///////////////////////////////////////////////////////////////////////\n");
 printf("Heap Sort:\n");
 printf("total number:%4d\n",length);
 printf("sorted result:\n");
 for (int i=length;i>=1;i--)
 {
  printf("%5d",arr9[i]);
 }
 cout<<endl;

 // test10
 int arr10[]={29,5,44,28,36,42,7,5,88,9,10};
 length=sizeof(arr10)/sizeof(*arr10);
 int * arr10_2=new int[length];
 MergeSort(arr10,arr10_2,0,length-1);
 printf("///////////////////////////////////////////////////////////////////////\n");
 printf("Merge Sort:\n");
 printf("total number:%4d\n",length);
 printf("sorted result:\n");
 for (int i=0;i<length;i++)
 {
  printf("%5d",arr10[i]);
 }
 cout<<endl;

 system("pause");
 return 0;
}

// 由小到大排序
// Straight Insert Sort
void InsertSort(int *arr,int length)
{
 for (int i=1;i<length;i++)
 {
  if (arr[i]<arr[i-1]) // 需要將arr[i]插入到已排序的列表中
  {
   int temp=arr[i];
   int j=0;
   for (j=i-1;j>=0;j--)
   {
    if (temp<arr[j])
    {
     arr[j+1]=arr[j];
    }
    else
    {
     break;
    }
   }
   arr[j+1]=temp;
  }
 }
}

// Straight Insert Sort 2
void InsertSort2(int arr[], int length)
{
 for (int i=1;i<length;i++)
 {
  if (arr[i]<arr[i-1]) // 需要進行插入
  {
   int temp=arr[i];
   int j=i-1;
   do
   {
    arr[j+1]=arr[j];
    j--;
   } while (j>=0&&temp<arr[j]);
   arr[j+1]=temp;
  }
 }
}

// Binary Insert Sort
void BinInsertSort(int arr[], int length)
{
 for (int i=1;i<length;i++)
 {
  if (arr[i]<arr[i-1]) // 需要插入到有序序列中
  {
   int temp=arr[i];
   int low=0;
   int high=i-1;
   while(low<=high)
   {
    int mid=(low+high)/2;
    if (temp<mid)
    {
     high=mid-1;
    }
    else if (temp>mid)
    {
     low=mid+1;
    }
    else
    {
     low=mid+1;
     break;
    }
   }
   for(int j=i-1;j>=low;j--)
   {
    arr[j+1]=arr[j];
   }
   arr[low]=temp;
  }
 }
}

// Shell Sort
void ShellSort(int *arr,int length)
{
 // Shell Sort
 int gap=length; // 初始化子序列的間隔
 do
 {
  gap=gap/3+1;
  for (int i=0+gap;i<length;i++) //判斷每個子序列
  {
   if (arr[i]<arr[i-gap]) // 需要插入到已排序的子序列
   {
    int temp=arr[i];
    int j=0;
    for (j=i-gap;j>=0;j=j-gap)
    {
     if (temp<arr[j])
     {
      arr[j+gap]=arr[j];
     }
     else
     {
      break;
     }
    }
    arr[j+gap]=temp;
   }
  }
 } while (gap>1);
}

// Shell Sort 2
void ShellSort2(int *arr,int length)
{
 int gap=length;
 do
 {
  gap=gap/3+1;
  for (int i=0+gap;i<length;i++)
  {
   if (arr[i]<arr[i-gap])
   {
    int temp=arr[i];
    int j=i-gap;
    do
    {
     arr[j+gap]=arr[j];
     j=j-gap;
    } while (j>=0&&temp<arr[j]);
    arr[j+gap]=temp;
   }
  }
 } while (gap>1);
}

// Bubble Sort
void BubbleSort(int *arr,int length)
{
 bool exchange=false;
 for (int i=0;i<length-1;i++)
 {
  exchange=false;
  for (int j=length-1;j>=i+1;j--)
  {
   if (arr[j]<arr[j-1]) // 需要交換
   {
    exchange=true;
    int temp=arr[j-1];
    arr[j-1]=arr[j];
    arr[j]=temp;
   }
  }
  if (exchange==false)
  {
   return;
  }
 }
}

// Quick Sort
void QuickSort(int *arr, int low, int high)
{
 if (low<high)
 {
  int pivocLoc=Partition(arr,low,high);
  QuickSort(arr,low,pivocLoc-1);
  QuickSort(arr,pivocLoc+1,high);
 }
}

// Partition
int Partition(int *arr, int low, int high)
{
 int pivotKey=arr[low]; // 記錄樞軸
 while(low<high)
 {
  while(low<high&&arr[high]>=pivotKey) --high;
  int temp=arr[high];arr[high]=arr[low];arr[low]=temp;
  while(low<high&&arr[low]<pivotKey) ++low;
  temp=arr[high];arr[high]=arr[low];arr[low]=temp;
 }
 return low;
}

// Simple Selection Sort
void SimpleSelectionSort(int *arr, int length)
{
 //
 for (int i=0;i<length;i++)
 {
  int index=i;
  for(int j=i+1;j<length;j++)
  {
   if (arr[j]<arr[index])
   {
    index=j;
   }
  }
  if(index!=i)
  {
   // exchange
   int temp=arr[i];
   arr[i]=arr[index];
   arr[index]=temp;
  }
 }
}

// Heap Sort,小根堆
void HeapSort(int *arr,int length)
{
 // 調整數組生成小根堆
 for (int i=length/2;i>=1;i--)
 {
  HeapAdjust(arr,i,length);
 }
 for (int i=length;i>1;--i)
 {
  // 交換堆頭的元素和最後一個
  int temp=arr[1];
  arr[1]=arr[i];
  arr[i]=temp;

  // 重新調整堆為小根堆
  HeapAdjust(arr,1,i-1);
 }
}

// HeapAdjust
void HeapAdjust(int *arr, int s,int end)
{
 int rloc=arr[s];
 for (int j=2*s;j<=end;j=j*2)
 {
  if (j<end&&arr[j]>arr[j+1])
  {
   j++; // 找到兩個兄弟節點中最小的節點
  }
  if (!(arr[j]<rloc))
  {
   break;
  }
  arr[s]=arr[j];
  s=j;
 }
 arr[s]=rloc;
}

// Merge Sort
void MergeSort(int *arr, int *arr2, int left, int right)
{
 if (left==right)
 {
  arr2[left]=arr[left];
  return;
 }
 if (left<right)
 {
  int mid=(left+right)/2;
  MergeSort(arr,arr2,left,mid);
  MergeSort(arr,arr2,mid+1,right);
  Merge(arr,arr2,left,mid,right);
 }
}

// Merge Array
void Merge(int *arr, int *arr2, int left, int mid, int right)
{
 // 將數組保存到暫存空間中
 for (int k=left;k<=right;k++)
 {
  arr2[k]=arr[k];
 }
 int s1=left;
 int s2=mid+1;
 int t=left;
 while(s1<=mid&&s2<=right)
 {
  if (arr2[s1]<=arr2[s2])
  {
   arr[t++]=arr2[s1++];
  }
  else
  {
   arr[t++]=arr2[s2++];
  }
 }
 while(s1<=mid) arr[t++]=arr2[s1++];
 while(s2<=right) arr[t++]=arr2[s2++];
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved