基本排序算法
绪:到目前为止学过的算法有很多,也很杂。随着工作中的应用,慢慢的发现,使用还是最初的冒泡排序,学习的高级排序算法一点也没有用到,而且也不考虑一些优化的内容。不知道这是怎么了,也许是写的项目要求不高,只要实现基本功能就可以了。还是自己对自己的要求降低了。我很有必要写一篇比较,以及算法的实现。
排序的目的:
我认为排序就是为了查找方便,一切都是为了查找,无论是在搜索引擎还是在网上查资料。基本功能都是查询。
一、直接插入排序
int a[10]={100,52,34,89,55,58,45,43,23,12}; int i,j,k,temp; for(i=1;i<10;i++){ temp = a[i]; //待插入元素 j=i-1; //待比较元素 while((a[j]>temp) && (j>=0)){ a[j+1]=a[j]; j--; } a[j+1]=temp; } for(k=0;k<10;k++)printf("%d,",a[k]);
结论:
把关键字插入到前面有序的数组中,把其他关键字后移。
二、交换排序(冒泡排序)
int a[10]={1,52,34,89,55,58,45,43,23,12}; int i,j,k; for(i=0;i<10;i++){ for(j=i+1;j<10;j++){ if(a[i]>a[j]){ k=a[i]; a[i]=a[j]; a[j]=k; } } } for(k=0;k<10;k++)printf("%d,",a[k]);
结论:
每次排序都会有一个数在正确的位置,即是冒泡排序,第一个关键字与第二个关键字比较,若逆序则交换,然后第二个与第三个比较,若逆序则交换,依次类推。