(1)直接插入排序
一般的,第i趟操作为:在含有i-1个记录的有序子序列r[i...i-1]中插入一个记录r[i]后 ,变成含有i个记录的有序子序列r[1...i]。
void insertSort(int A[], int n)
{
int temp, j, p;
for(p=1; p<n; p++)
{
temp = A[p];
for(j=p; j>0 && (A[j-1]>temp); j--)
{
A[j] = A[j-1];
}
A[j] = temp;
}
}
(2)冒泡排序
void bubbleSort(int A[], int n)
{
int i, j, temp;
for(i=1; i<n; i++)
for(j=0; j<n-i; j++)
{
if(A[j] > A[j+1])
{
temp = A[j];
A[j] = A[j+1];
A[j+1] = temp;
}
}
}
(3)二分查找排序
void binaryInsertSort(int A[], int n)
{
int low, high, mid, i, j, temp;
for(i=1; i<n; i++)
{
low = 0;
high = i;
temp = A[i];
while(low <= high)
{
mid = (low + high) / 2;
if( temp < A[mid])
{
high = mid - 1;
}
else
{
low = mid + 1;
}
}
//每次查找完毕后,low总比high大一,a[low]总是存放第一个比temp大的数,因此应从此处开始,
//每个元素右移一位,并将temp存入a[j+1]中,这样就保证了a[0...i]是排好序的
for(j=i-1; j>=low ; j--)
{
A[j+1] = A[j];
}
A[j+1] = temp;
}
}