(一)插入排序
原理是,现对数组第一个和第二个排序,这样前2个元素就是有序的了,再引入第三个元素,找到合适的位置插入。。。以此插入剩余元素。这种排序算法比起冒泡排序算法效率更高,有点类似冒泡排序的改进算法。虽然效率上比冒泡排序好,但是也是一种简单排序算法,循环次数为 1+2+3...+n-1,即n(n+1)/2, 平均情况下时间复杂度还是O(n2),n的平方。
//实现二
void insert_sort(int *array, int size)
{
int i, j, temp;
for (i=1; i<size; i++) {
for (j=i, temp=array[i]; j>0&&temp<array[j-1]; j--)
array[j] = array[j-1];
array[j] = temp;
}
}
(二)堆排序:
(三)合并排序
int main(){
int p=0;
int r=19;
merge_sort(a,p,r);
for(int i=0;i<20;i++) cout<<a[i]<<" ";
cout<<endl;
return 0;
}
(四)快速排序
int main(){
int p=1;
int r=20;
quicksort(a,p,r);
for(int l=1;l<=20;l++){
cout<<a[l]<<" ";
}
cout<<endl;
return 0;
}
(五)冒泡排序
思想是:每次将数组前N个中最大(升序)或最小(降序)的数交换到数组底部,每次数组大小N--,再进行如此操作,直到所有的数都已排序即N=1。这样循环比较的次数是(n-1)+(n-2)+(n-3)....... 约等于(n)(n+1)/2, 时间复杂度为O(n2),N的平方。
//实现二
void bubble_sort(int *array, int size)
{
int i, j, temp;
for (i=size-1; i>1; i--)
for (j=0; j<i; j++)
if (array[j] > array[j+1]) {
temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
}
}
(六)计数排序
(七)交换排序
原理是:用第一个元素和第二个元素比较,若第一个元素大于第二个,则交换,交换后第一个元素在与第三个元素比较.....直到N个元素,然后再选择第二个元素和第三个元素比较,进行同样操作.....直到选择到N个元素。这样操作完成后数组就变为升序了。其实说白了,原理就是第一次交换,确保第一个元素是最小的,第二次交换确保第二个元素是第二小的.... 以此类推。效率也很低,循环次数(n-1)(n-2)..即O(n2), n的平方,C语言实现如下:
(八)选择排序
(希尔排序)