热点新闻
温习 6+2 种排序方式
2023-07-08 22:48  浏览:643  搜索引擎搜索“广企汇”
温馨提示:为防找不到此信息,请务必收藏信息以备急用! 联系我时,请说明是在广企汇看到的信息,谢谢。
展会发布 展会网站大全 报名观展合作 软文发布





  • 堆排序(实现难易:⭐⭐⭐)

① 将序列生成堆,调整成最大堆
② 弹出堆顶,生成新序列,重复 ① 。







  • 快速排序(实现难易:⭐⭐⭐)

(a)先移动 j 找到 <= low 的数,再移动 i 找到>= low 的数:
① 若 i < j ,两者交换,继续移动。 ② 若 i >= j,j 与 low 交换。
(b)交换后数列划分,分别令各子数列第一个数为 low,重复(a)。







  • 归并排序(实现难易:⭐⭐⭐)





  • 希尔排序(实现难易:⭐⭐)





  • 直接插入排序(实现难易:⭐)

将下标 1~n-1 的数依次插入准序数列。







  • 简单选择排序(实现难易:⭐)

将下标 j=i+1~n-1 的最小数依次放在 i=0~n-2。







  • 冒泡排序(实现难易:⭐)

将下标 i=n-1~1 的数从后往前两两相邻数 j=i-1~0 比较,若反序则交换。

  • 哈希排序(实现难易:⭐)

运用一个数组来记录每个数出次数,也就是将序列和数组的下标进行对应,从而实现排序。

#include <iostream> #include <stdlib.h> using namespace std; //1、直接插入排序 void InsertSort(int key[], int n){ int i,j; for(i=1; i<n; i++){ //遍历第 2~n-1 个元素 int insert = key[i]; for(j=i-1; j>=0; j--){ if(insert < key[j]) key[j+1] = key[j]; else break; } key[j+1] = insert; } } //2、简单选择排序 void SelectSort(int key[], int n){ int small,i,j; for(i=0; i<n-1; i++){ //遍历第 1~n-1 个元素 small = i; for(j=i+1; j<n; j++){ //遍历第 i+1~n 个元素 if(key[j] < key[small]) small = j; } if(small != i) swap(key[i], key[small]); } } //3、冒泡排序 void BubbleSort(int key[], int n){ int i,j; for(i=n-1; i>0; i--){ //遍历第 2~n 个元素 bool isSwap = false; for(j=0; j<i; j++){ //遍历第 1~i 个元素 if(key[j] > key[j+1]){ swap(key[j],key[j+1]); isSwap = true; } } if(!isSwap) break; } } //4、快速排序 int Partition(int key[], int low,int high){ int i = low,j = high + 1; int flag = key[low]; //当前分割元素 do{ do i++; while(key[i] < flag); do j--; while(key[j] > flag); if(i < j) swap(key[i], key[j]); }while(i < j); swap(key[low], key[j]); return j; //下一个分割元素 } void QuickSort(int key[], int low, int high){ int k; if(low < high){ k = Partition(key,low,high); QuickSort(key,low,k-1); QuickSort(key,k+1,high); } } void QuickSort(int key[], int n){ QuickSort(key,0,n-1); } //5、归并排序 void _merge(int key[], int low, int mid, int high) { //合并 for (int i = 0; i < mid; i++) { for (int j = mid; j < high; j++) { if (key[i] > key[j]) swap(key[i], key[j]); } } } void MergeSort(int key[], int low, int high) { if (low < high) { int length = high - low; if (length == 1) { if (key[low] > key[high]) swap(key[low],key[high]); } for (int i=length/2; i>0; i=i/2) { //分治 MergeSort(key, low, low + i); MergeSort(key, high - i, high); _merge(key, low, i, high); //i为有序序列长度 } } } //6、堆排序 void AdjustDown(int heap[], int current, int border){ int tmp = heap[current]; while (2*current+1<=border){ int child = 2*current+1; //左孩子 if (child+1<=border && heap[child]<heap[child+1]) child++; if (heap[child] > heap[current]) { heap[current] = heap[child]; heap[child] = tmp; } else break; current=child; } } void HeapSort(int heap[],int n){ for(int i=(n-2)/2; i>=0; i--) //初始调整 AdjustDown(heap,i,n-1); for(int j=n-1; j>0; j--){ swap(heap[0],heap[j]); //交换 AdjustDown(heap, 0, j-1); //调整 } } //7、希尔排序 void shell(int arr[], int n, int start, int gap) { for (int j = start + gap; j < n; j += gap) { int i = j - gap; int tmp = arr[j]; while (i >= start && arr[i] > tmp) { arr[i + gap] = arr[i]; i -= gap; } arr[i + gap] = tmp; } } void ShellSort(int arr[], int n) { if (n <= 1) return; for (int gap=n/2; gap>=1; gap/=2) { for (int i=0; i<gap; i++) shell(arr, n, i, gap); } } //8、哈希排序 void HashSort(int key[], int n){ int hash_map[n] = {0}; for (int i = 0; i < n; i++){ hash_map[key[i]]++; } for (int i = 0; i < n; i++){ for (int j = 0; j < hash_map[i]; j++) printf("%d ", i); } } //产生随机序列 void Init(int key[], int n){ cout<<"\n\n随机序列:"; for(int i=0; i<n; i++){ key[i] = rand()%20; cout<<key[i]<<" "; } } //输出有序序列 void output(int key[], int n){ for(int i=0; i<n; i++) cout<<key[i]<<" "; } int main(){ int key[500000], n; cout<<"\n随机序列长度:"; cin>>n; Init(key,n); InsertSort(key,n); cout<<"\n\n直接插入排序:"; output(key,n); Init(key,n); SelectSort(key,n); cout<<"\n\n简单选择排序:"; output(key,n); Init(key,n); BubbleSort(key,n); cout<<"\n\n冒泡排序:"; output(key,n); Init(key,n); QuickSort(key,n); cout<<"\n\n快速排序:"; output(key,n); Init(key,n); MergeSort(key,0,n-1); cout<<"\n\n归并排序:"; output(key,n); Init(key,n); HeapSort(key,n); cout<<"\n\n堆排序:"; output(key,n); Init(key,n); ShellSort(key,n); cout<<"\n\n希尔排序:"; output(key,n); Init(key,n); cout<<"\n\n哈希排序:"; HashSort(key,n); cout<<"\n\n"; return 0; }




发布人:d678****    IP:117.173.23.***     举报/删稿
展会推荐
让朕来说2句
评论
收藏
点赞
转发