大顶堆排序的java代码 大顶堆排序的java代码

Java排序一共有几种?日常操作中,常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、桶排序、鸽巢排序、归并排序等 。
各类排序方法代码如图:
Java的排序算法有哪些java的排序大的分类可以分为两种:内排序和外排序 。在排序过程中,全部记录存放在内存 , 则称为内排序,如果排序过程中需要使用外存,则称为外排序 。下面讲的排序都是属于内排序 。
1.插入排序:直接插入排序、二分法插入排序、希尔排序 。
2.选择排序:简单选择排序、堆排序 。
3.交换排序:冒泡排序、快速排序 。
4.归并排序
5.基数排序
3. 用任意一种编程语言(C/C++/Java/C#/VB.NET)写出任意一种你所知的排序算法(比如:冒泡排序,归并排#includestdio.h
#includestdlib.h
void BubbleSort(int a[], const int first, const int last);//冒泡排序
void InsertSort(int a[], const int first, const int last);//插入排序
void SelectSort(int a[], const int first, const int last);//选择排序
void MergeSort(int a[], const int p, const int r);//合并排序
void QuickSort(int a[],const int p,const int r);//快速排序
void ShellSort(int a[],const int p,const int r,const int dlta[],const int t);//希尔排序
void HeapSort(int a[],const int p, int r); //堆排序
void StoogeSort(int a[],const int p,const int r);//Stooge排序(不用)算法复杂度没算清楚
void main()
{
//插入排序算法
int a[11] = {6,4,5,3,2,1};
int dlta[]={9,5,3,2,1};
//BubbleSort(a,0,5);
//InsertSort(a,0,5);
//SelectSort(a,0,5);
//MergeSort(a,0,5);
//QuickSort(a,0,5);
//ShellSort(a,0,5,dlta,5);
HeapSort(a,0,5);
//StoogeSort(a,0,5);
for(int i=0; i=5;i++)
{
printf("%d ",a[i]);
}
}
/************************冒泡排序***********************/
void BubbleSort(int a[], int first, int last)
{
//实现对数组a[]中a[first]到a[last]升序的“冒泡”排序
int i,j,temp;
for(i=first; i=last; i++)
{
for(j=first; j last-i; j++)
{
if(a[j]a[j+1])
{
temp= a[j];
a[j]= a[j+1];
a[j+1] = temp;
}
}
}
}
/************************插入排序***********************/
void InsertSort(int a[], int first, int last)
{
//实现对数组a[]中a[first]到a[last]升序的“插入”排序
//最坏情况为n的平方,,多用于小数组
int i,j,temp;
for(i=first+1; i=last; i++)
{
temp= a[i];
j = i - 1;
while((j = 0)(a[j]temp))
{
a[j+1]= a[j];
j--;
}
a[j+1] = temp;
}
}
/************************选择排序***********************/
void SelectSort(int a[], int first, int last)
{
//实现对数组a[]中a[first]到a[last]升序的“选择”排序
int i, j, temp, num;
for(i=first; ilast; i++)
{
num = i;
for(j=i+1; j=last; j++)
{
if(a[j]a[num])
{
num = j;
}
}
if(i != num)
{
temp= a[num];
a[num] = a[i];
a[i]= temp;
}
}
}
/************************合并排序***********************/
void Merge(int a[],const int p,const int q,const int r)
{
//合并排序算法中的实现合并的子程序
int iLLength,iRLength;
int *L, *R, i, j, k;
iLLength = q - p + 1;
iRLength = r - q;
L = (int *)malloc(iLLength*sizeof(int)); //或者 C++中 new int[iLLength];
R = (int *)malloc(iRLength*sizeof(int)); //或者 C++中 new int[iRLength];
if(L == 0 || R== 0)
{
printf("内存分配失败?。。?);
return;