面试最基本的三种排序算法 冒泡排序 插入排序 选择排序
2013-04-20 16:09
621 查看
#include <cstdio> #include<time.h> #include<cstdlib> #include<cstdio> using namespace std; /********创建数组,并输入元素************/ void Random(int a[],int n) { int i=0; srand( (unsigned)time( NULL ) ); while(i<n) { a[i++]=rand()/655; } } /**********遍历输出数组元素*************/ void Traverse(int arr[], int count) { int i; printf("array output:\n"); for(i=0; i<count; i++ ) printf("%d\t", arr[i]); printf("\n"); } /******************************************************* 冒泡排序 算法:将相邻的两个数比较,将小的调到前头; 有n个数,则要进行n-1趟比较,第一次比较中要进行 n-1次两两比较,在第j趟比较要进行n-j次两两比较 ********************************************************/ void BublleSort(int arr[], int count) { int i,j,temp; for(j=0; j<count-1; j++ ) /* 气泡法要排序n-1次*/ for(i=0; i<count-j-1; i++ )/* 值比较大的元素沉下去后,只把剩下的元素中的最大值再沉下去就可以啦 */ { if(arr[i]>arr[i+1])/* 把值比较大的元素沉到底 */ { temp=arr[i+1]; arr[i+1]=arr[i]; arr[i]=temp; } } } /******************************************************* 插入排序 算法: 在得到要排序的数组以后,将数组分为两部分, 数组的第一个元素为一部分,剩下的元素为一部分, 然后从数组的第二个元素开始,和该元素以前的所有元素比较, 如果之前的元素没有比该元素大的,那么该元素的位置不动, 如果有的元素的值比该元素大,那么记录下他所在的位置, 例如为i,该元素的位置例如为k,则将从i到k位置上的 所有元素统统向后移动,然后将k移到i元素的位置上。 这样就找到了k所在的位置。每一个元素都这样进行, 最终就会得到排好顺序的数组。 ********************************************************/ void InsertSort(int arr[],int count) { int i,j,temp; for(i=1; i<count; i++ )//数组分两个部分,从第二个数组元素开始 { temp = arr[i];//操作当前元素,先保存在其它变量中 for(j=i-1; j>=0&&arr[j]>temp;j--)//从当前元素的上一个元素开始查找合适的位置,一直查找到首元素 { arr[j+1] = arr[j]; } if(j!=(i-1)) /*第i个数字比前面的都大,不需要重新插入*/ { arr[j+1]=temp; } } } /******************************************************* 选择排序 算法:首先以一个元素为基准,从一个方向开始扫描, 比如从左至右扫描,以A[0]为基准。接下来从A[0]...A[9] 中找出最小的元素,将其与A[0]交换。然后将基准位置右 移一位,重复上面的动作,比如,以A[1]为基准,找出 A[1]~A[9]中最小的,将其与A[1]交换。一直进行到基准位 置移到数组最后一个元素时排序结束(此时基准左边所有元素 均递增有序,而基准为最后一个元素,故完成排序)。 ********************************************************/ void SelectSort(int arr[], int count) { int i,j,min,temp; for(i=0; i<count-1; i++) { min = i;//以此元素为基准 for(j=i+1; j<count;j++ )//从j往前的数据都是排好的,所以从j开始往下找剩下的元素中最小的 { if(arr[min]>arr[j])//把剩下元素中最小的那个放到arr[j]中 { min = j; } if(min!=i) { temp=arr[min]; arr[min]=arr[i]; arr[i]=temp; } } } } const int count=20; int main() { int array[count]={0}; Random(array,count); Traverse(array, count);//输出最初数组 //BublleSort(array, count);//冒泡排序 //Traverse(array, count);//输出排序后的数组 //InsertSort(array, count);//插入排序 //Traverse(array, count);//输出排序后的数组 SelectSort(array, count);//插入排序 Traverse(array, count);//输出排序后的数组 return 0; }
相关文章推荐
- 笔试面试最常涉及到的12种排序算法(包括插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序、桶排序、计数排序和基数排序)进行了详解。每一种算法都有基本介绍、算
- 三种基本排序算法-冒泡排序,选择排序,插入排序
- 常用算法--基本排序算法(冒泡排序,选择排序,插入排序,快速排序,归并排序,桶排序)
- 基本排序算法(冒泡排序 选择排序 插入排序 快速排序 归并排序 基数排序 希尔排序)
- 三种最基本的排序 选择排序 插入排序 冒泡排序
- 三种排序算法python源码——冒泡排序、插入排序、选择排序
- 菜鸟学编程之三:三种最基本排序算法的实现(冒泡排序、选择排序、直接插入排序)
- 算法_基本排序算法之冒泡排序,选择排序,插入排序和希尔排序
- 三种排序算法python源码——冒泡排序、插入排序、选择排序
- 三个基本排序算法执行效率比较(冒泡排序,选择排序和插入排序)
- 三种数组排序算法(冒泡排序、选择排序、插入排序、二分查找法)
- 插入排序是基本排序算法中最好的一种,虽然插入排序也是需要O(N^2)时间,但它比冒泡排序快一倍,比选择排序还要快点。
- 三种基础排序算法(选择排序、插入排序、冒泡排序)
- 基本排序算法(冒泡排序,选择排序,插入排序)后续[时间测试]
- 基本排序算法(冒泡排序,选择排序,插入排序)后续[时间测试]
- java基本排序算法-插入排序-快速排序-选择排序-冒泡排序
- 三个简单、基本的排序算法---插入排序、选择排序、冒泡排序
- 排序-基本排序-选择排序,插入排序,冒泡排序
- C语言基本排序算法之插入排序与直接选择排序实现方法
- 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较