matlab基数排序,c语言 数据结构 利用随机函数产生N个随机整数,对这些数进行多种方法进行排序...

满意答案

srand(time(NULL)); //产生随机数

for(i = 0; i < n; i++)

a[i] = rand()%(n - i);

extern void insert(int a[], int x) //插入排序

{

int i;

int n;

int j;

int temp;

n = x;

for(i = 1; i < n; i++)

{

temp = a[i];

j = i - 1;

while(temp < a[j] && j >= 0)

{

a[j + 1] = a[j];

j--;

}

a[j + 1] = temp;

}

}

static void shellsort(int a[], int d, int x)

{

int i;

int j;

int n;

int temp;

n = x;

for(i = d; i < n; i += d)

{

temp = a[i];

j = i - d;

while(a[j] > temp && j >= 0)

{

a[j + d] = a[j];

j -= d;

}

a[j + d] = temp;

}

}

extern void shell(int a[], int x) //希尔排序

{

int n;

int d;

n = x;

d = n / 2;

while(d > 0)

{

shellsort(a, d, n);

d /= 2;

}

}

extern void bubble(int a[], int x) //冒泡排序

{

int ischange;

int i;

int j;

int n;

n = x;

for(i = n - 1; i > 0; i--)

{

ischange = 0;

for(j = 0; j < i; j++)

{

if(a[j + 1] < a[j])

{

a[j + 1] += a[j];

a[j] = a[j + 1] - a[j];

a[j + 1] = a[j + 1] - a[j];

ischange = 1;

}

}

if(0 == ischange)

{

break;

}

}

}

static int partion(int a[], int left, int right)

{

int l;

int r;

int priv;

l = left;

r = right;

priv = a[l];

while(l < r)

{

while(a[r] > priv && r > l)

r--;

if(l < r)

{

a[l++] = a[r];

}

while(a[l] < priv && r > l)

l++;

if(l < r)

{

a[r--] = a[l];

}

}

a[l] = priv;

return l;

}

static void quicksort(int a[], int left, int right)

{

int l;

int r;

int priv;

l = left;

r = right;

if(l < r)

{

priv = partion(a, l, r);

quicksort(a, l, priv - 1);

quicksort(a, priv + 1, r);

}

}

extern void quick(int a[], int n) //快速排序

{

int l;

int r;

l = 0;

r = n - 1;

quicksort(a, l, r);

}

extern void selec(int a[], int x) //选择排序

{

int i;

int j;

int k;

int n;

n = x;

for(i = 0; i < n; i++)

{

k = i;

for(j = i; j < n; j++)

{

if(a[j] < a[k])

{

k = j;

}

}

if(i != k)

{

a[i] += a[k];

a[k] = a[i] - a[k];

a[i] -= a[k];

}

}

}

static void mergearray(int a[], int first, int mid, int last, int p[])

{

int i;

int j;

int k;

i = first;

j = mid + 1;

k = 0;

while(i <= mid && j <= last)

{

if(a[i] <= a[j])

{

p[k++] = a[i++];

}

else

{

p[k++] = a[j++];

}

}

while(i <= mid)

{

p[k++] = a[i++];

}

while(j <= last)

{

p[k++] = a[j++];

}

for(i = 0; i < k; i++)

{

a[first + i] = p[i];

}

}

static void mergesort(int a[], int first, int last, int p[])

{

int mid;

if(last > first)

{

mid = first + (last - first) / 2;

mergesort(a, first, mid, p);

mergesort(a, mid + 1, last, p);

mergearray(a, first, mid, last, p);

}

}

extern void merge(int a[], int n) 归并排序

{

int *p;

p = (int *)malloc(n * sizeof(int));

if(!p)

{

perror("malloc");

exit(-1);

}

mergesort(a, 0, n - 1, p);

free(p);

}

static void swap(int data[], int a, int b)

{

data[a] ^= data[b];

data[b] ^= data[a];

data[a] ^= data[b];

}

static void siftup(int data[], int n) // create heap

{

int i;

int p;

for(i = n; i > 1 && data[p = i / 2] > data[i]; i = p)

swap(data, p, i);

}

static void siftdown(int data[], int n) // adjust heap

{

int i;

int c;

i = 1;

while(1)

{

c = 2 * i;

if(c > n)

break;

if(c + 1 <= n && data[c + 1] < data[c])

c++;

if(data[i] <= data[c])

break;

swap(data, c, i);

i = c;

}

}

static void heapsort(int data[], int n)

{

int i;

for(i = 2; i <= n; i++)

{

siftup(data, i);

}

for(i = n; i >= 2; i--)

{

swap(data, 1, i);

siftdown(data, i - 1);

}

}

extern void heap(int a[], int n) //堆排序

{

int *p;

int i;

p = (int *)malloc((n + 1) * sizeof(int));

if(!p)

{

perror("malloc");

}

for(i = 0; i < n; i++)

*(p + i + 1) = a[i];

heapsort(p, n);

for(i = 0; i < n; i++)

a[i] = *(p + i + 1);

free(p);

}

基数排序根据你是N进制数,申请N个队列,以空间换取时间,排序复杂度为线性o(n)

12分享举报

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值