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
printf("%5d",arr8[i]);
}
cout<
// 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<
// 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
printf("%5d",arr10[i]);
}
cout<
system("pause");
return 0;
}
// 由小到大排序
// Straight Insert Sort
void InsertSort(int *arr,int length)
{
for (int i=1;i
if (arr[i]
int temp=arr[i];
int j=0;
for (j=i-1;j>=0;j--)
{
if (temp
arr[j+1]=arr[j];
}
else
{
break;
}
}
arr[j+1]=temp;
}
}
}
// Straight Insert Sort 2
void InsertSort2(int arr[], int length)
{
if (arr[i]
int temp=arr[i];
int j=i-1;
do
{
arr[j+1]=arr[j];
j--;
} while (j>=0&&temp
}
}
}
// Binary Insert Sort
void BinInsertSort(int arr[], int length)
{
for (int i=1;i
if (arr[i]
int temp=arr[i];
int low=0;
int high=i-1;
while(low<=high)
{
int mid=(low+high)/2;
if (temp
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
if (arr[i]
int temp=arr[i];
int j=0;
for (j=i-gap;j>=0;j=j-gap)
{
if (temp
arr[j+gap]=arr[j];
}
else