本文主要是介绍冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序的递归版。(直接可用,懒人必备)。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
注意:1.在使用前需要先将Swap函数放在最前面。基本上都用了了Swap函数。
2.完成的是升序版本,如想逆序,自行更改。
目录
Swap函数:
冒泡排序:
选择排序
插入排序
希尔排序
堆排序
快速排序
Swap函数:
void Swap(int* a, int* b)
{int temp = *a;*a = *b;*b = temp;
}
冒泡排序:
void BubbleSort(int arr[], int n)
{for (int i = 0; i < n-1; i++){for (int j = 0; j < n-i-1; j++){if (arr[j] > arr[j + 1]){Swap(&arr[j], &arr[j + 1]);}}}
}
选择排序
void SlectSrot(int* a, int n)
{int left = 0;int right = n - 1;while (left<right){int mini = left;int maxi = left;for (int i = left+1; i <= right; i++){if (a[i]<a[mini]){mini = i;}if (a[maxi] < a[i]){maxi = i;}}Swap(&a[mini], &a[left]);if (maxi == left)//因为如果maxi==left,left已经和mini交换了之前的left的位置此时在mini处。{maxi = mini;}Swap(&a[maxi], &a[right]);left++;right--;}
}
插入排序
void InsertSort(int* a, int n)
{for (int i = 0; i < n-1; i++){int end = i;int temp = a[end + 1];while (end >= 0){if (a[end] > temp){Swap(&a[end], &a[end+1]);end--;}else{break;}}a[end + 1] = temp;}
}
希尔排序
void ShellSort(int* a, int n)
{int garp = n/2;while (garp>0){for (int i = 0; i < n - garp; i++){if (garp < 1){break;}int end = i;int temp = a[end + garp];while (end >= 0){if (a[end] > temp){Swap(&a[end], &a[end + garp]);end -= garp;}else{break;}}a[end + garp] = temp;}garp /= 2;}
}
堆排序
void HeapSort(int arr[], int n)
{for (int i = (n - 1 - 1) / 2; i >= 0; i--){AdjustDown(arr, i, n);}int end = n - 1;while (end > 0){Swap(&arr[0], &arr[end]);AdjustDown(arr, 0, end);end--;}
}//向下调整
void AdjustDown(int arr[], int father,int n)
{int child=father*2+1;while(child<n){if (child + 1 < n && arr[child] < arr[child + 1]){child++;}if (arr[child]>arr[father]){Swap(&arr[child], &arr[father]);father = child;child = father * 2+1;}else{break;}}
}
快速排序
void QuickSort(int* a, int left,int right)
{ if (left >= right){return;}int begin=left;int end = right;//对快速排序的优化//1.随机取值//2.三数取中//随机取值//int randi = rand() % (right - left);//randi += left;//Swap(&a[left], &a[randi]);//三数取中//int mid = FindMid(a, left, right);//Swap(&a[left], &a[mid]);int keyi=left;while (left < right){while (left<right && a[right]>=a[keyi]){right--;}while (left < right && a[left]<=a[keyi]){left++;}Swap(&a[left], &a[right]);}Swap(&a[left], &a[keyi]);QuickSort(a, begin, left - 1);QuickSort(a, left + 1, end);
}
这篇关于冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序的递归版。(直接可用,懒人必备)。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!