没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
















、快速排序数组
int parons(int A[],int low,int high)
!""
!##
$
$
void qsort(int A[],int low,int high)
%
& '(())将第一次排序的结果作为枢轴
* (("))递归调用排序 由 到 !"
* (#())递归调用排序 由 !# 到
$
$
void main()
&+(,(-,(.-(,-(./(-0(/1(.(,1(-2$
* &(+(+
$
Java:
1. publicintgetMiddle(Integer[]list,intlow,inthigh){
2. inttmp=list[low];//数组的第一个作为中轴
3. while(low<high){
4. while(low<high&&list[high]>tmp){
5. high--;
6. }
7. list[low]=list[high];//比中轴小的记录移到低端
8. while(low<high&&list[low]<tmp){
9. low++;
10. }
11. list[high]=list[low];//比中轴大的记录移到高端
12. }
13. list[low]=tmp;//中轴记录到尾
14. returnlow;//返回中轴的位置

15. }
16. publicvoid_quickSort(Integer[]list,intlow,inthigh){
17. if(low<high){
18. intmiddle=getMiddle(list,low,high);//将 list 数组进行
一分为二
19. _quickSort(list,low,middle-1);//对低字表进行递归
排序
20. _quickSort(list,middle+1,high);//对高字表进行递归
排序
21. }
22. }
23. publicvoidquick(Integer[]str){
24. if(str.length>0){//查看数组是否为空
25. _quickSort(str,0,str.length-1);
26. }
27. }
28. publicclassTestMain{
29.
30. /**
31. *@paramargs
32. */
33. publicstaticvoidmain(String[]args){
34. //TODOAuto-generatedmethodstub
35. Integer[]list={34,3,53,2,23,7,14,10};
36. QuicSortqs=newQuicSort();
37. qs.quick(list);
38. for(inti=0;i<list.length;i++){
39. System.out.print(list[i]+"");
40. }
41. System.out.println();
42. }
43.
44. }
,、归并排序数组
具体操作过程:
将 个元素分成各含 ), 个元素的子序列
,用归并排序法对这两个子序列递归地排序
-合并这两个已经排序好的子序列得到排序结果
代码:
34&56+
!4 & &(7(8( ))归并排序中的合并算法

&54&56+$))临时数组
))第一个数组索引
9))第二个数组索引
))临时数组索引
% 7(98#(+ "7##))分别将 (9(指向各自数组的首部。
%8#))若 到第一个数组的尾部,将第二个数组余下元素复制到临时数组
&5& &9##'$
%9 #))若 9 到第二个数组的尾部,将第一个数组余下元素复制到临时数
组
&5& &##'$
%& && &9))第一个数组的当前元素较小,将其复制到临时数组
&5& &##$
&5& &9##$
$
))将有序的临时数组复制到 & &,7 起始位置,9+ 临时数组的起始位置
% 7(9+ ##(9##
& &&59$
$
!4 : & &(& ())归并排序
%&
#& ),
4 : & &(& ())对前半部分进行排序
4 : & &(#())对后半部分进行排序
4 & &(& (())合并前后两部分
$
$
8&
& 64&56;(.(,(-(/((0(2(+(1$
4 : & 6(+(4&56"
+
$
,、归并排序链表
struct node
{ int data;
node * next;
};
/* 对两个有序链表进行归并 */
node *MergeList(node *head1, node *head2)
{
node * tmp;

if(head1 == NULL) return head2;
if(head2 == NULL) return head1;
if(head1->data < head2->data)
{ tmp = head1;
head1 = head1->next; }
else
{ tmp = head2;
head2 = head2->next; }
tmp->next = MergeList(head1, head2); //经典
return tmp;
}
/* 归并排序,参数为要排序的链表的头结点,函数返回值为排序后的链表的头结点 */
node *MergeSort(node *head)
{
if(head == NULL)
return 0;
node * r_head = head;
node *head1 = head;
node* head2 = head;
while(head2->next != NULL && head2->next ->next!= NULL)
{
head1 = head1->next;
head2 = head2->next->next;
}
if(head1->next == NULL)/*说明只有一个节点,则返回该节点*/
return r_head;
head2 = head1->next;
head1->next = NULL;
head1 = head;
/*函数 MergeList 是对两个有序链表进行归并,返回值是归并后的链表的头结点*/
r_head = MergeList(MergeSort(head1), MergeSort(head2));
return r_head;
}
-、3<& 数列
()递归,=()
long long Fibonacci_Solution1(unsigned int n)
{
int result[2] = {0, 1};
if(n < 2)
return result[n];
return Fibonacci_Solution1(n - 1) + Fibonacci_Solution1(n - 2);
}
(,)两个变量,=()

long long Fibonacci_Solution2(unsigned n)
{
int result[2] = {0, 1};
if(n < 2)
return result[n];
long long fOne = 0;
long long fTwo = 1;
long long fibN = 0;
for(unsigned int i = 2; i <= n; ++ i)
{
fibN = fOne + fTwo;
fOne = fTwo;
fTwo = fibN;
}
' return fibN;
}
.、两个栈实现一个队列
某队列的声明如下:
template<typename T> class CQueue
{
public:
CQueue() {}
~CQueue() {}
void appendTail(const T& node); // append a element to tail
void deleteHead(); // remove a element from head'
private:
T>m_stack1;
T>m_stack2;
};
代码:
template<typename T> void CQueue<T>::appendTail(const T& element)
{
m_stack1.push(element); // push the new element into m_stack1
}'
// Delete the head from the queue
template<typename T> void CQueue<T>::deleteHead()
{
// if m_stack2is empty,and there are some
//elements inm_stack1, push them in m_stack2
if(m_stack2.size()<= 0)
{
while(m_stack1.size()>0)
剩余26页未读,继续阅读
资源评论

- danmomo97672015-10-15内容齐全,清晰,非常好

lilijuan5377475
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
