排序是一种常见的计算机算法,用于将一组数据按照特定顺序排列。在C++中,有许多排序方法可供选择,包括冒泡排序、选择排序、插入排序、归并排序、快速排序等。
C++排序算法大全1、冒泡排序是一种简单的排序算法,它的基本思想是通过重复地交换相邻的元素来排序。下面是一个使用C++实现冒泡排序的示例代码:
#includeiostream//数组的长度constintLENGTH=5;//冒泡排序函数,将数组arr升序排序voidbubbleSort(intarr[]){//外层循环控制排序轮数for(inti=0;iLENGTH-1;i++){//内层循环控制每轮排序中的比较次数for(intj=0;jLENGTH-i-1;j++){//如果前一个数大于后一个数,交换两个数的位置if(arr[j]arr[j+1]){inttemp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}}intmain(){intarr[]={3,1,4,2,5};//调用冒泡排序函数对数组进行排序bubbleSort(arr);//输出排序后的数组for(inti=0;iLENGTH;i++){std::coutarr[i]"";}std::coutstd::endl;return0;}
输出结果如下:
输出结果2、选择排序是一种简单的排序算法,它的基本思想是每次从未排序的序列中选择最小(或最大)的元素,放到已排序的序列的末尾。下面是一个使用C++实现选择排序的示例代码:
#includeiostream//数组的长度constintLENGTH=5;//选择排序函数,将数组arr升序排序voidselectionSort(intarr[]){//外层循环控制排序轮数for(inti=0;iLENGTH-1;i++){//内层循环查找未排序部分的最小值intminIndex=i;for(intj=i+1;jLENGTH;j++){if(arr[j]arr[minIndex]){minIndex=j;}}//将最小值与第i个元素交换位置inttemp=arr[i];arr[i]=arr[minIndex];arr[minIndex]=temp;}}intmain(){intarr[]={9,6,22,1,5};//调用选择排序函数对数组进行排序selectionSort(arr);//输出排序后的数组for(inti=0;iLENGTH;i++){std::coutarr[i]"";}std::coutstd::endl;return0;}
输出结果如下:
输出结果3、插入排序是一种简单的排序算法,它的基本思想是将待排序的元素逐个与已排序的序列进行比较,找到合适的位置并插入。下面是一个使用C++实现插入排序的示例代码:
#includeiostream//数组的长度constintLENGTH=6;//插入排序函数,将数组arr升序排序voidinsertionSort(intarr[]){//外层循环控制排序轮数for(inti=1;iLENGTH;i++){////内层循环查找插入位置inttemp=arr[i];intj=i-1;while(j=0arr[j]temp){arr[j+1]=arr[j];j--;}//插入到合适的位置arr[j+1]=temp;}}intmain(){intarr[]={3,0,4,-9,5,9};//调用插入排序函数对数组进行排序insertionSort(arr);//输出排序后的数组for(inti=0;iLENGTH;i++){std::coutarr[i]"";}std::coutstd::endl;return0;}
输出结果如下:
输出结果4、快速排序是一种分治策略的排序算法,其核心思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。下面是一个使用C++实现快速排序的示例代码:
#includeiostream#includealgorithmusingnamespacestd;//快速排序的递归函数voidquickSort(intarr[],intleft,intright){//如果左边界大于右边界,则退出递归if(left=right){return;}//设置左边界和右边界inti=left;intj=right;//设置基准值为数组的第一个元素intpivot=arr[left];//循环条件为左边界小于右边界while(ij){//从右边界开始查找小于基准值的元素while(ijarr[j]=pivot){j--;}//将小于基准值的元素移动到左边界的位置arr[i]=arr[j];//从左边界开始查找大于基准值的元素while(ijarr[i]=pivot){i++;}//将大于基准值的元素移动到右边界的位置arr[j]=arr[i];}//将基准值放到中间位置arr[i]=pivot;//对基准值左边的数组进行快速排序quickSort(arr,left,i-1);//对基准值右边的数组进行快速排序quickSort(arr,i+1,right);}intmain(){//定义一个数组intarr[]={3,5,1,2,4,9,6,12};//获取数组的长度intn=sizeof(arr)/sizeof(arr[0]);//快速排序quickSort(arr,0,n-1);//输出排序后的数组cout"排序后的数组:";for(inti=0;in;i++){coutarr[i]"";}coutendl;return0;}
输出结果如下:
输出结果5、此外,C++还提供了一些高级的排序函数,例如std::sort和std::stable_sort,它们可以对数组或容器中的元素进行排序。这些函数使用了更快的排序算法,并且可以使用自定义的比较函数来定义排序的顺序。
下面是一个使用std::sort函数对数组进行升序排序的示例代码:
#includealgorithm#includeiostreamintmain(){intarr[]={2,7,3,2,5};//对数组进行升序排序std::sort(arr,arr+5);//输出排序后的数组for(inti=0;i5;i++){std::coutarr[i]"";}std::coutstd::endl;return0;}
输出结果如下:
输出结果需要注意的是,C++的标准库中的排序函数均为模板函数,因此可以用于各种类型的数据。但是,如果要对自定义类型的数据进行排序,则需要自定义比较函数,并传递给排序函数。例如,下面是一个使用自定义比较函数对自定义类型进行排序的示例代码:
#includealgorithm#includeiostream#includestringstructPerson{std::stringname;intage;};//自定义比较函数,按照年龄从小到大排序bool