排序算法分两种:
1.比较排序,时间复杂度最少达到O(n*lg n),主要有:插入排序,冒泡排序,选择排序,合并排序,堆排序,快速排序等。
2.非比较排序,时间复杂度可以达到O(n),主要有:计数排序,基数排序,桶排序等。
输入:n个数<a1,a2,a3.............an>
输出:输入序列的一个重排列<a'1,a'2,a'3........a'n>,使a'1<a'2<a'3<........<a'n
插入排序(有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法)
c实现:
#include <stdio.h>
#define len 8
void insertSort(int *,int);
int main(int argc,char * argv[])
{
int arr[len]={5,8,6,7,9,4,3,2};
insertSort(arr,len);
for(int i=0;i<len;i++)
printf("%d ",arr[i]);
printf("\n");
return 0;
}
void insertSort(int * arr,int length)
{
int key;
for(int i=1;i<length;i++)
{
key=arr[i];
int j=i-1;
while(j>=0&&arr[j]>key)
{
arr[j+1]=arr[j];
j--;
}
arr[j+1]=key;
}
}
shell排序(插入排序的改进版)
C语言实现:
#include <stdio.h>
void shellSort(int [],int );
int main(int args,char *argv[])
{
int arr[8]={5,8,6,7,9,4,3,2};
shellSort(arr,8);
for(int i=0;i<8;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}
void shellSort(int arr[],int n)