#include<stdio.h>#include<stdlib.h>voidexchange(int* a,int* b){int temp =*a;*a =*b;*b = temp;}voidbubbleSort(int* arr,int n){for(int i =1; i < n; i++){int flag =0;//其作用是为了检验某次遍历后是否完成排序,完成排序flag依旧0,未完成则为1for(int j =0; j < n - i; j++){if(arr[j]> arr[j +1]){exchange(&arr[j],&arr[j +1]);
flag =1;/*int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;*/}}if(flag ==0){//完成排序直接结束循环return;}}}intmain(){int arr[]={4,2,6,5,8,9};int n =sizeof(arr)/sizeof(int);bubbleSort(arr, n);//函数调用for(int i =0; i < n;i++){printf("%d",arr[i]);}return0;}
C++
#include<iostream>#include<vector>#include<algorithm>usingnamespace std;//void swap(int* a, int* b) {// int temp = *a;// *a = *b;// *b = temp;//}voidbubbleSort(vector<int>& vec,int n){for(int i =1; i < n; i++){int flag =0;//其作用是为了检验某次遍历后是否完成排序,完成排序flag依旧0,未完成则为1for(int j =0; j < n - i; j++){//因为j<n-i不会出现下面数组越界的情况if(vec[j]> vec[j +1]){swap(vec[j], vec[j +1]);
flag =1;}}if(flag ==0)return;}}intmain(){
vector<int>vec ={6,3,9,8,5,3};int n = vec.size();bubbleSort(vec, n);for(int i =0; i < n; i++){
cout<<vec[i]<<" ";}return0;//完成排序直接结束循环}
选择排序
C语言
#include<stdio.h>#include<stdlib.h>voidswap(int* a,int* b){int temp =*a;*a =*b;*b = temp;}voidSelectSort(int* arr,int n){//先找待排序序列最大值和待排序序列最后一个元素交换for(int i =1; i < n; i++){//控制排序趟数int index =0;//最大值下标int j;for( j =0; j <= n - i; j++){//当此循环遍历完成后j会多遍历一次,j=n-i+1,所以下面交换的j进行了减1操作if(arr[j]> arr[index]){
index = j;}}swap(&arr[index],&arr[j-1]);}}intmain(){int arr[]={4,2,6,5,8,9};int n=sizeof(arr)/sizeof(int);SelectSort(arr, n);//函数调用for(int i =0; i < n; i++){printf("%d ", arr[i]);}return0;}
C++
#include<iostream>#include<vector>usingnamespace std;//void swap(int* a, int* b) { //交换数值// int temp = *a;// *a = *b;// *b = temp;//}voidselectSort(vector<int>& vec,int n){//选择排序int index =0;int j;//for(int i =1; i < n; i++){//数组排完序后,最多遍历n-1次int flag =0;for(j =0; j <= n - i; j++){//当此循环遍历完成后j会多遍历一次,j=n-i+1,所以下面交换的j进行了减1操作if(vec[index]< vec[j]){
index = j;}}swap(vec[index], vec[j -1]);}}intmain(){
vector<int> vec ={6,3,9,8,5,3};int n = vec.size();selectSort(vec, n);for(int i =0; i < n; i++){
cout<<vec[i]<<" ";}return0;}
插入排序
#include<stdio.h>voidinsertSort(vecrot<int>& arr,int n){//函数定义for(int i =0;i < n; i++){//控制无序区下标的范围int j = i -1;//有序区最后一个元素的下标int temp = arr[i];for(;j >=0;j--){//当此循环遍历完成后j会多遍历一次,j=-1,所以下面交换的j进行了加1操作if(temp < arr[j]{
arr[j+1]= arr[j];}else{break;}}
arr[j+1]=temp;//j在上面多减了一次}}intmain(){int arr[]={4,2,6,5,8,9};int n =sizeof(arr)/sizeof(int);insertSort(arr,n);for(int i =0; i<n;i++){printf("%d",arr[i]);}return0;}
C++
#include<iostream>#include<vector>usingnamespace std;voidinsertSort(vector<int>& vec,int n){for(int i =1; i < n; i++){//控制无序区数组的下标范围int temp = vec[i];//将无序区的第一个元素有第三变量记录int j = i -1;//有序区最后一个元素(最大元素)的下标for(; j >=0; j--){//当此循环遍历完成后j会多遍历一次,j=-1,所以下面交换的j进行了加1操作if(temp < vec[j]){
vec[j +1]= vec[j];}elsebreak;//当temp与arr[j]不发生交换时,结束本次for (; j >= 0; j--) 循环}
vec[j +1]= temp;//当无序区的某一个元素在有序区找到位置时,进行插入}}intmain(){
vector<int> vec={4,2,6,5,8,9};int n = vec.size();insertSort(vec, n);for(int i =0; i < n; i++){
cout<<vec[i]<<" ";}return0;}
计数排序(桶思想)
C语言
#include<stdio.h>#include<stdlib.h>intmaxval(int* arr,){//求要排序数组中的最大值int max=arr[0];for(int i =0;i<n;i++){if(arr[i]> max){
max = arr[i];}}return max;}voidbucketSort(int*arr,int n){int max =maxval(arr,n);int* bucket =(int*)malloc(sizeof(int)*(max +1));//创建一个桶数组,将桶数组的下标作为要排序的数字,桶数组内放置排序数组内相同数的个数,没有的数字对应的桶内放0for(int i =0; i<= max;i++){//对桶中元素进行初始化为0的操作
bucket[i]=0;}for(int i =0;i < n; i++){//向桶内计要排序中某一个数的个数
bucket[ar[i]]++;}int index =0;//在原数组中把数据放在for(int i =0;i<=max;i++){while(bucket[i]>0){
arr[index++]=i;
bucket[i]--;}}free(bucket);}intmain(){int arr[]={4,3,6,5,8,9};int n =sizeof(arr)/sizeof(int);bucketSort(arr,n);for(int i =0;i<n;i++){printf("%d",arr[i]);}return0;}
C++
#include<iostream>#include<vector>#include<algorithm>usingnamespace std;intmaxval(vector<int>& vec,int n){//求要排序数组中的最大值int MAX = vec[0];for(int i =1; i < n; i++){
MAX =max(MAX, vec[i]);}return MAX;}voidbucketSort(vector<int>& vec,int n){int max =maxval(vec,n);//创建一个桶数组,将桶数组的下标作为要排序的数字,桶数组内放置排序数组内相同数的个数,没有的数字对应的桶内放0//对桶中元素进行初始化为0的操作
vector<int>bucket(max +1,0);for(int i =0; i < n; i++){//向桶内计要排序中某一个数的个数
bucket[vec[i]]++;}int index =0;//在原数组中把数据放在for(int i =0; i <= max; i++){while(bucket[i]>0){
vec[index++]= i;
bucket[i]--;}}}intmain(){
vector<int> vec ={4,3,6,5,8,9};int n = vec.size();bucketSort(vec, n);for(int i =0; i < n; i++){
cout<<vec[i]<<" ";}return0;}
堆排序
C语言
#include<stdio.h>voidswap(int* a,int* b){int temp =*a;*a =*b;*b = temp;}voidAdjust(int* arr,int start,int end){int father = start;int child = father *2+1;while(child <= end){if(child +1<= end && arr[child]< arr[child +1]){
child++;}if(arr[child]> arr[father]){swap(&arr[child],&arr[father]);
father = child;
child = father *2+1;}else{break;}}}voidheapSort(int* arr,int n){for(int i = n /2-1; i >=0; i--){Adjust(arr, i, n -1);}for(int j = n -1; j >=0; j--){swap(&arr[0],&arr[j]);Adjust(arr,0, j -1);}}intmain(){int arr[]={6,3,8,9,5,7,12};int n =sizeof(arr)/sizeof(int);heapSort(arr,n);for(int i =0; i < n; i++){printf("%d",arr[i]);}return0;}
C++
#include<iostream>#include<vector>#include<algorithm>usingnamespace std;voidAdjust(vector<int>& vec,int start,int end){int father = start;int child = father *2+1;while(child <= end){if(child +1<= end && vec[child]< vec[child +1]){
child++;}if(vec[child]> vec[father]){swap(vec[child], vec[father]);
father = child;
child = father *2+1;}else{break;}}}voidheapSort(vector<int>& vec,int n){for(int i = n /2-1; i >=0; i--){Adjust(vec, i, n -1);}for(int j = n -1; j >=0; j--){swap(vec[0], vec[j]);Adjust(vec,0, j -1);}}intmain(){
vector<int>vec ={6,3,2,9,7,8,5,1,0};int n = vec.size();heapSort(vec,n);for(int i =0; i < n; i++){
cout << vec[i]<<" ";}return0;}
快速排序
C语言
#include<stdio.h>#include<stdlib.h>voidQuicksort(int* arr ,int l ,int r){if( l>=r){//基线条件return;}int temp = arr[l];int i = l -1;int j = r +1;int index = l;while(index < j){if(arr[index]== temp){
index++;}elseif( arr[index]> temp){swap(&arr[--j],&arr[index]);}else{swap(&arr[++i],&arr[index++]);}ouicksort(arr,l,i);//左边递归Quicksort(arr,j, r);//右边递归}intmain(){int arr[]={4,2,5,9,6};int n =sizeof(arr)/sizeof(int);Quicksort(arr ,0, n-1);//函数调用for(int i =0; i < n; i++){printf("3d", arr[i]);}return0;}
C++
#include<iostream>#include<vector>#include<algorithm>usingnamespace std;//void swap(int* a, int* b) {// int temp = *a;// *a = *b;// *b = temp;//}voidQuickSort(vector<int>& vec,int L,int R){if(L >= R){return;}int i = L -1;int j = R +1;int index = L;int temp = vec[L];while(index < j){if(vec[index]== temp){
index++;}elseif(vec[index]> temp){swap(vec[index], vec[--j]);}else{swap(vec[index++], vec[++i]);}}QuickSort(vec, L, i);QuickSort(vec, j, R);}intmain(){
vector<int> vec ={6,2,1,8,9,7,3,0};int n = vec.size();QuickSort(vec,0, n -1);for(int i =0; i < n; i++){
cout<<vec[i]<<" ";}return0;}
归并排序
C语言
#include<stdio.h>#include<stdlib.h>voidMerg(int* arr,int L,int mid,,int R){int* temp =(int*)malloc(sizeof(int)*(R-L+l);int i =1;int j = mid +1;int index =0;while(i <= mid && j<=R){if(arr[i]<=arr[i]){
temp[index++]==arr[j++];}}while(i<=mid){
temp[index++]=arr[j++];}while(j<=mid){
temp[index++]=arr[j++];}
i =L;for(index =0;index<=R-L;index++){
arr[i++]= temp[index];}}voidMergSort(int* arr,int L,int R){if(L>=R){
returm;}int mid =(L+R)/2;MergSort(arr,L,mid);MergSort(arr,mid+1,R);merg(arr,Lmid,R);}intmain(){int arr[]={2,0,5,6,8,1,2,5};int n =sizeof(arr)/sizeof(int);MergSort(arr,0,n-1);for(int i =0;i<n;i++){printf("%d",arr[i]);}return0;}
C++
#include<iostream>#include<vector>usingnamespace std;voidMerg(vector<int>& vec,int L,int mid,int R){//int* p = (int*)malloc(sizeof(int) * (R - L + 1));
vector<int>p((R - L +1),0);//申请数组空间int index =0;int i = L;int j = mid +1;while(i <= mid && j <= R){//比较数组大小,小的放入数组if(vec[i]<= vec[j]){
p[index++]= vec[i++];}elseif(vec[i]> vec[j]){
p[index++]= vec[j++];}}while(i <= mid){//判断左半部分是否越界
p[index++]= vec[i++];}while(j <= R){//判断右半部分是否越界
p[index++]= vec[j++];}
i = L;for(int index =0; index <=(R - L); index++){//将新数组的数放入原本数组
vec[i++]= p[index];}//free(p);}voidMergSort(vector<int>& vec,int L,int R){if(L >= R){return;}int mid =(R - L)/2+ L;//为了防止数据溢出,因此用此方法计算MergSort(vec, L, mid);MergSort(vec, mid +1, R);Merg(vec, L, mid, R);//合并}intmain(){
vector<int> vec ={6,5,2,7,9,3,8};int n = vec.size();MergSort(vec,0, n -1);for(int i =0; i < n; i++){
cout<<vec[i]<<" ";}return0;}