考研结束了,不得不感慨这是一段很难忘的经历。在复习计算机专业课的过程中,不仅很大的提高了我对基础知识的掌握,也更加让我感慨算法的美妙。不知道为什么,自己对排序算法的感情尤为深,在今天下午滑水看直播的时候,脑子里突然蹦出了堆排序的想法,所以既然想法都出来了,那就实践一下,把当时复习的几种简单的排序算法再实现一下,温故而知新。
基本的排序算法主要分为插入排序,选择排序和交换排序。
一,插入排序
(1)直接插入排序
public static void InsertSort(int []A, int n ) //直接插入排序
{
int value;
int i,j;
for(i=1 ;i<n;i++ )
{
if(A[i]<A[i-1])
{
value = A[i];
for(j=i-1;j>=0 && A[j]>value;j--)
A[j+1] = A[j];
A[j+1] = value;
}
}
}
(2)希尔排序
public static void ShellSort(int []A,int n) //希尔排序
{
int j;
for(int dk = n/2 ; dk>=1;dk = dk/2)
{
for(int i = dk ; i<n ; i++)
{
if(A[i] < A[i-dk])
{
int value = A[i];
for(j = i-dk; j>0 &&A[j]>value; j = j-dk)
A[j+dk] = A[j];
A[j+dk] = value;
}
}
}
}
二,交换排序
(1)冒泡排序
public static void BubbleSort(int []A , int n) //冒泡排序
{
int value;
boolean flag;
for(int i = 0 ; i<n-1 ; i++)
{
flag = false;
for(int j = n-1; j>i; j--)
{
if(A[j]<A[j-1])
{
value = A[j];
A[j] = A[j-1];
A[j-1] = value;
flag = true;
}
}
if(flag == false)
break;
}
}
(2)快速排序
public static void QuickSort(int []A , int low , int high) //快速排序
{
if(low < high)
{
int Part = Sort.Partition(A, low, high);
QuickSort(A,low,Part-1);
QuickSort(A,Part+1,high);
}
}
public static int Partition(int []A, int low, int high)
{
int Pivot = A[low];
while(low < high)
{
while(low < high && A[high] >= Pivot) high--;
A[low] = A[high];
while(low < high && A[low] <= Pivot) low++;
A[high] = A[low];
}
A[low] = Pivot;
return low;
}
三,选择排序
(1)简单选择排序
public static void SelectSort(int []A , int n)
{
int value;
for(int i = 0; i< n-1 ; i++)
{
int minp = i;
for(int j = i+1; j < n; j++)
{
if(A[j] < A[minp])
minp = j;
}
value = A[i];
A[i] = A[minp];
A[minp] = value;
}
}
(2)堆排序
public static void CreateHeap(int []A , int n)
{
int i;
for( i = n/2 ; i>=1;i--)
Sort.AdjustHeap(A, i, n);
}
public static void AdjustHeap(int []A , int k , int n)
{
A[0] = A[k];
for(int i = 2*k ; i <=n; i*=2)
{
if(i<n&&A[i]<A[i+1])
i++;
if(A[0] >= A[i])
break;
else
{
A[k] = A[i];
k = i;
}
}
A[k] = A[0];
}
public static void HeapSort(int []A , int n)
{
int value;
Sort.CreateHeap(A, n);
for(int i = n ; i>=1;i--)
{
System.out.print(A[1] + " ");
value = A[i];
A[i] = A[1];
A[1] = value;
Sort.AdjustHeap(A, 1, i-1);
}
}