算法即内功
选择排序
选择排序是一种就地排序。选择排序适用数据量小的时候。排序是基于关键量。在迭代的时候与关键量进行比较,在需要交换的时候再交换。
优点:
- 易于实现。(很简单,正常思路排序)
- 就地排序,不需要额外的存储空间。
缺点:
- 扩展性不是很好:O(n^2)
算法:
1.选择最小(大)值放在第一个位置。
2.选择剩下元素的最小(大)值放在第二个位置。
3.就这样一直选择,直到最后。
void selectSort(int a[],int n){
int i,j,min,index;
for(i=0;i<n-1;i++){
min=a[i];
index=i;
for(j=i+1;j<n;j++){
if(min>a[j])
index=j;
}
a[i]=a[j];
a[j]=min;
}
}
时间复杂度:O(n^2)
插入排序
插入排序是一种比较简单有序的比较排序。在这个算法中,每次迭代都会从数据中删除一个元素,并将其插入有序列中该元素该位于的位置上。从输入数据中随机选择被删除的元素,重复上述过程直到所有输入元素均已插入有序序列中。
优点:
- 简单的实现。
- 对于规模不大的输入数据而言,该算法是高效的。
- 自适应算法:若列表基本有序的情况下,时间复杂度为O(n+d),d是逆序次数。
- 比冒泡排序,选择排序高效。
算法:
void insertSort(int a[],int n){
int i,j,temp;
for(i=1;i<n;i++){
temp=a[i];
j=i;
while(a[j-1]>temp&&j>=0){
a[j]=a[j-1];
j--;
}
a[j]=v;
}
}
插入排序要优于前两种排序,因为在基本有序的输入时,插入排序几乎是线性的。