对于非负整数0,1,2,....n-1,随机放入一个大小为n的一维数组中,调整元素顺序,辅助空间为O(1)

来源:互联网 发布:three.js 实现宇宙 编辑:程序博客网 时间:2024/05/19 19:57

题目:

    对于非负整数0,1,2,....n-1,随机放入一个大小为n的一维数组中,请用时间复杂度为O(n)的算法,把他们调整为0,1,2,3,....n-1的顺序,辅助空间为O(1),只允许用交换操作,一次只能交换两个元素位置

 

Code(C):

#include<stdio.h>#include<stdlib.h>void change(int *a,int len);void main(){int a[] = {10,6,9,5,2,8,4,7,1,3};int len = sizeof(a)/sizeof(int);int i;for(i = 0;i < len;i++)printf("%d ",a[i]);printf("\n");printf("交换后的结果为\n");change(a,len);for(i = 0;i < len;i++)printf("%d ",a[i]);printf("\n");}void change(int *a,int len){int i,temp;for(i = 0;i < len;){temp = a[i];a[i] = a[temp-1];a[temp-1] = temp;if(a[i] == i+1)i++;}}