最近突然想总结一下排序的常用算法,先把代码放出来,等这段时间把作业写完了,再来一个一个分析一下。
1. 插入排序
//插入排序
void insertSort(int *array,int length)
{
int i,j;
for(i=1;i<length;i++)
{
int tmp = array[i];
j=i-1;
while(tmp < array[j] && j>=0)
{
array[j+1] = array[j];
j--;
}
array[++j] = tmp;
}
}
2. 希尔排序
void shell(int arr[],int length,int step)
{
int i,j;
for(i=step;i<length;i+=step)
{
int tmp = arr[i];
j=i-step;
while(tmp < arr[j] && j>=0)
{
arr[j+1] = arr[j];
j -=step;
}
arr[j+step] = tmp;
}
}
//希尔排序
void shellSort(int arr[],int length)
{
int step = length-1;
while(step >= 1)
{
shell(arr,length,step);
step = step/2;
}
}
3. 冒泡排序
//冒泡排序
void bubbleSort(int arr[],int length)
{
int i,j;
int temp;
for(i=0;i<length-1;i++)
{
for(j=0;j<length-i-1;j++)
{
if(arr[j]>arr[j+1])
{
//交换
arr[j] = arr[j]^arr[j+1];
arr[j+1] = arr[j]^arr[j+1];
arr[j] = arr[j]^arr[j+1];
}
}
}
}
4. 快速排序
//快速排序
void quickSort(int arr[],int left,int right)
{
int i=left,j=right,pivot;
int p = (left+right)/2;
pivot = arr[p];
while(i<j)
{
while(i<=p && arr[i] <= pivot)
i++;
if(i<p)
{
arr[p] = arr[i];
p = i;
}
while(j>=p && arr[j]>=pivot)
j--;
if(j>p)
{
arr[p] = arr[j];
p=j;
}
}
arr[p] = pivot;
if(p-left>1)
quickSort(arr,left,p-1);
if(right-p >1)
quickSort(arr,p+1,right);
}