[用c语言编写一个排序程序要求使用基数排序算法最好能详细解释]#include#define MAX_NUM_OF_KEY 8 //关键字项数的最大值#define RADIX 10 //关键字基数,此时是十进制整数的基数#define MAX_SPACE 10000 typedef int KeysType; typedef in...+阅读
//#include
//
//using namespace std;
//
//void Guibing(int*arr,int low,int high)
//{
// int m_Begin1 = low;
// int m_End1 = (low+high)/2;
// int m_Begin2 = m_End1+1;
// int m_End2 = high;
//
// int* temp = new int[high-low+1];
// //申请一个这两组的空间
// //要看 只要有一组到结尾就要结束
// int k=0;
// for (;m_Begin1 <= m_End1 & m_Begin2 <= m_End2;k++)
// {
// // 然后找小的往里存
// if (arr[m_Begin1] < arr[m_Begin2])
// {
// temp[k] = arr[m_Begin1];
// m_Begin1++;
// }
// else
// {
// temp[k] = arr[m_Begin2];
// m_Begin2++;
// }
// }
//
// //如果第一组没到结尾 顺序存
// while(m_Begin1 <= m_End1)
// {
// temp[k] = arr[m_Begin1];
// k++;
// m_Begin1++;
// }
// //如果第二组没到结尾 顺序存
// while(m_Begin2 <= m_End2)
// {
// temp[k] = arr[m_Begin2];
// k++;
// m_Begin2++;
// }
// //把已经排好序的 temp 放回到原来对应的位置
// for (k = 0;k // { // arr[low+k] = temp[k]; // } // delete[] temp; //} // //void Digui(int*arr,int low,int high) //{ // if (low < high) // { // int mid = (low+high)/2; // Digui(arr,low,mid); // Digui(arr,mid+1,high); // Guibing(arr,low,high); // } //} // //int main() //{ // int arr[10] = {9,11,5,3,17,13,1,17,25,8}; // // Digui(arr,0,9); // // for (int i =0 ;i<10;i++) // { // cout << arr[i] << " "; // } // // system("pause"); // return 0; //} 直接上源码,仅供参考: #include // 一个递归函数 void mergesort(int *num,int start,int end); // 这个函数用来将两个排好序的数组进行合并 void merge(int *num,int start,int middle,int end); int main() { // 测试数组 int num[10]= {12,54,23,67,86,45,97,32,14,65}; int i; // 排序之前 printf("Before sorting:\n"); for (i=0; i<10; i++) { printf("%3d",num[i]); } printf("\n"); // 进行合并排序 mergesort(num,0,9); printf("After sorting:\n"); // 排序之后 for (i=0; i<10; i++) { printf("%3d",num[i]); } printf("\n"); return 0; } //这个函数用来将问题细分 void mergesort(int *num,int start,int end) { int middle; if(start { middle=(start+end)/2; // 归并的基本思想 // 排左边 mergesort(num,start,middle); // 排右边 mergesort(num,middle+1,end); // 合并 merge(num,start,middle,end); } } //这个函数用于将两个已排好序的子序列合并 void merge(int *num,int start,int middle,int end) { int n1=middle-start+1; int n2=end-middle; // 动态分配内存,声明两个数组容纳左右两边的数组 int *L=new int[n1+1]; int *R=new int[n2+1]; int i,j=0,k; //将新建的两个数组赋值 for (i=0; i { *(L+i)=*(num+start+i); } // 哨兵元素 *(L+n1)=1000000; for (i=0; i { *(R+i)=*(num+middle+i+1); } *(R+n2)=1000000; i=0; // 进行合并 for (k=start; k<=end; k++) { if(L[i]<=R[j]) { num[k]=L[i]; i++; } else { num[k]=R[j]; j++; } } delete [] L; delete [] R; } /**设个有序关键字表s1=(18,25,37,42),s2=(20,33,40).同时将s1,s2存储在数组r[1...7]中 **s1放r[1..4],s2放[5..7],现要归并到一维数组r2[1..7]中,只要依次比较这两个有序 **表中相应记录关键字,按取小原则复制到r2中 **/ #include#define MAXITEM 100 typedef struct rec { int key; char data[20]; }elemnode[MAXITEM]; void merge(elemnode r,elemnode r1,int l,int m,int h) { // i,j是r的指示器,i的取值从l到m, j的取值从m+1到h,k是r1的指示器 int i = l,j = m+1,k = l; while(i 以下为关联文档: c语言初学者求下面输出杨辉三角的c语言代码的详细说明我和你写的不一样啊 #include int main() { int i,j; int a[10][10]; for(i=0;i<10;i++) //初始化第0行和对角线元素 { a[i][10]=1; a[i][i]=1;} for(i=2;i<10;j++) //公式... C语言课程设计 shell排序堆排序快速排序归并递归和非递归#include#include#include#includevoid shellSort(int *a,int len) { int step; int i,j; int temp; for(step=len/2; step>0;step/=2) { for(i=step;i=0 & temp0; i--) { h... 如何用C语言编一个归并排序的程序#include "MergeSort.h"#includeusing namespace std;MergeSort::MergeSort(vector_list, int _len){ list.push_back(0); link.push_back(0); for (int i=0; ilen = _len;}//... c语言归并排序之前写过一个模版类,这里是部分代码: void Merger<T>::sub_Merger(T * array, size_t n) { if(n == 1) //~ 递归终止 return ; else if(n == 2) //~ 递归终止 { if( array[0]... c语言编写快速排序int partition(int n[],int left,int right) //int类型的方法,传入参数(int类型的 数组n,int类型的参数left和right) { int lo,hi,pivot,t;//定义int类型的变量 pivot=n[left];//... 随机生成10个待排序数据用C语言写出二路归并排序算法#include<stdio.h> #include<stdlib.h> #include<time.h> int b[ 10 ]; void Merge( int c[], int d[], int l, int m, int r ) { int i = l, j = m + 1, k = l; while( ( i... 帮我随便写下用C语言实现并归排序的代码int a[100]; void Merge(int head,int mid,int tail) { int temp[tail-head+1]; int top=-1; int i=head,j=mid+1; while (i<=mid && j<=tail) { if (a[i]>a[j]) te... 高分送!如何用C语言实现归并排序算法!#include <iostream> using namespace std; void merge(int array[],int left,int right) { int temparray[right]; for(int j=left;j<=right;j++) { temparray[j]=array[j]... C语言初学者 qsort排序//给你个归并 #include <stdio.h> void m_sort(int a[] ,int p ,int r); void m_sort_sort( int a[],int p,int q,int r ); void main() { int i; int a[8]={3,5,2,6,1,7,4,...c语言归并排序
用C语言编一个归并排序的程序