内部排序算法
一、直接插入排序
1、算法思想:
每次将一个待排序的记录按其关键字大小插入到前面已经排好序的子序列中,知道全部记录插入完成。、
如:
关键字序列:49、38、65、97、76、12、27、49,将其排成升序的序列。
排序前:49、38、65、97、76、12、27、49
第一趟插入排序之前:选中38
第一趟排序之后:38、49、65、97、76、12、27、49
第二趟排序之前:选中:65
第二趟排序之后:38、49、65、97、76、12、27、49
第三趟排序之前:选中97
第三趟排序之后:38、49、65、97、76、12、27、49
第四趟排序之前:选中76
第四趟排序之后:38、49、65、76、97、12、27、49
第五趟排序之前:选中12
第五趟排序之后:12、38、49、65、76、97、27、49
其他的一次类推
2、代码:
void InsertSort(int A[],int n){
int i,j,temp;
for(i = 1; i < n; i++){
if(A[i] < A[i-1]){
temp = A[i];
for(j = i-1; j >=0 && A[j] > temp; j--){
A[j+1] = A[j];
}
A[++j] = temp;
}
}
}
3、复杂度
最好的时间复杂度为:O(n),当元素有序时,不需要移动元素
最坏时间复杂度为:O(n^2),当元素逆序时
平均时间复杂度为:O(n^2)
空间复杂度为:O(1)
4、算法稳定性
稳定
二、交换排序
冒泡排序
1、算法思想:
从后往前(后者从前往后)两两比较相邻元素的值,若为逆序,则交换它们,直到比较结束。称这样的过程为“一趟”冒泡排序。
一组序列:49、68、65、97、76、13、27、49
第一次冒泡:13冒到最前面:13、49、68、65、97、76、27、49
第二次冒泡:27冒到最前面:13、27、49、68、65、97、76、49
第三次冒泡:49冒到前面:13、27、49、49、68、65、97、76
其