#include<iostream> #include<string> using namespace std; void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } /*插入排序*/ void InsertSort(int *a, int n) { int i, j,temp; for(i=1;i<n;i++) if (a[i] < a[i - 1]) { temp = a[i]; for (j = i-1; a[j] > temp; j--) a[j + 1] = a[j]; a[j + 1] = temp; } } /*冒泡排序*/ void BubbleSort(int *a, int n) { int i, j; for (i = 1; i < n; i++) for (j = 0; j <= n - 1 - i; j++) if (a[j] > a[j + 1]) swap(a[j], a[j + 1]); } /*快速排序*/ int Partition(int *a, int left, int right) { int pivot = a[left]; while (left < right) { while (left < right&&a[right] >= pivot) --right; a[left] = a[right]; while (left < right&&a[left] < pivot) ++left; a[right] = a[left]; } a[left] = pivot; return left; } void QuickSort(int *a, int left, int right) { if (left < right) { int pivotpos = Partition(a, left, right); QuickSort(a, left, pivotpos - 1); QuickSort(a, pivotpos + 1, right); } } /*2路归并排序*/ void Merge(int *a, int left,int mid,int right) { int b[100],i,j,k; //空间复杂度为O(n),稳定 for (k = left; k <= right; k++) b[k] = a[k]; for (i = left, j = mid + 1, k = i; i <= mid&&j <= right; k++) { if (b[i] <= b[j]) a[k] = b[i++]; else a[k] = b[j++]; } while (i <= mid) a[k++] = b[i++]; while (j <= right) a[k++] = b[j++]; } void MergeSort(int *a, int left, int right) { if (left < right) { int mid = (left + right) / 2; MergeSort(a, left, mid); MergeSort(a, mid + 1, right); Merge(a, left, mid, right); } } /*简单选择排序*/ void SelectSort(int *a, int n) { int i, j,min; for (i = 0; i < n; i++) { min = i;//记录最小元素位置 for (j = i+1; j < n; j++) { if (a[min] > a[j]) min = j; } swap(a[i], a[min]); } } /*堆排序,有点麻烦,不想写了*/ void AdjustDown(int *a, int k, int n)//向下调整算法 { int i, temp = a[k]; for (i = 2 * k; i <= n; i *= 2) { if (i < n&&a[i] < a[i + 1])//寻找第k个节点的两个孩子中比较大的节点和父节点比较 i++; if (temp >= a[i]) break; else { a[k] = a[i];//将父节点的值置为孩子节点的值 k = i;//记录被交换值的孩子节点的位置,以及向下筛选 } } a[k] = temp; } void BuildMaxHeap(int *a, int n)//建立大根堆 { for (int i = n / 2; i >=0; i--) AdjustDown(a, i, n); } void HeapSort(int *a, int n)//排序算法,每次将根节点输出并重新调整为大根堆 { int i; BuildMaxHeap(a, n); for (i = n; i >0; i--)//n-1趟 { swap(a[i], a[0]); AdjustDown(a, 0, i - 1); } } int main() { int a[100],i; for (i = 0; i < 10; i++) cin >> a[i]; //BubbleSort(a, 10); //QuickSort(a, 0, 9); //InsertSort(a, 10); //MergeSort(a, 0, 9); //SelectSort(a, 10); //HeapSort(a, 9); for (i = 0; i <10; i++) cout << a[i] << " "; cout << endl; return 0; }
记录一下c++几种基本排序算法的简单实现(int数组)
最新推荐文章于 2024-06-01 20:09:00 发布