当前位置:   article > 正文

c++实现数组和指针的快速排序_c++如何用指针排序数组选择排序

c++如何用指针排序数组选择排序

网上也有很多类似的代码.在这里写一下自己对快速排序的理解.
快速排序()
{
{
将a[n]分为三个部分
第一个部分 小于或等于A的,a[m]到a[i]
第二个部分a[i] =a
第三个部分 大于后等于A的a[i+1]a[n]
}
数组a 从a[m]到a[i-1]进行快速排序
将数组a 从a[i+1]到a[n]进行快速排序
}
对于链表也大概是这个思路.
/数组
对于数组a[n],实现a[m]到a[n]的排序,首先定义一个快速排序函数QuickSort函数,参数为数组首地址(a),和需要排序的起止坐标(m,n).
QuickSort函数的任务是将数组a[]中分为两部分,一部分大于A,一部分小于A.通常A为所需排序数组的第一个元素a[m].
这样第一次排序结束数组a,会是下面的情况
{ 小于A的元素 }{A}{大于A的元素}
这时候只需要在QuickSort函数内递归调用既可以实现快速排序

void QuickSort(int a[], int left, int right){
if (left < right)
{
int i = left, j = right, A;
A = a[left];
while (i < j) //将数组分为三个部分
{
while (i < j) //从右往左找,找到第一个比A小的数;
if (a[j] < A)
{
a[i++] = a[j];
break;
}
else j--;
while (i < j){//从右往左找,找到第一个比A大的数;
if (a[i]>A)
{
a[j--] = a[i];
break;
}
else i++;
}
}
a[i] = A; //将A赋给a[i]
QuickSort(a, left, i - 1);
QuickSort(a, i + 1, right);//递归
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

/单链表//
对于单链表的快速排序,设从链表头head到tail的快速排序
对于链表head-> -> ->——-> tail的排序
先设指针 p指向head,mid指向head->next,t指向mid->next ,q指向mid
因为我自己定义的head头结点有值,因此会多一个步骤.若第一个元素值大于第二个元素的值则交换他们,把较小的值存入mid->data
这样从指针while(t++!=NULL)判断t->data的值与mid->data的关系,分别将t放在放在p或者q后.最后另p->next=mid,q->next=tail;
再递归完成的快速排序.

void QuickSort(node *head, node *tail) 
{
if (head == tail || head->next == tail)
return;
node *mid,*p,*q,*t;
mid = head->next;
p = head;
q = mid;
t = mid->next;
if (head->data > head->next->data)
SWAP(head->data,head->next->data);
while (t != tail)
{ 
if (t->data <= mid->data)
{ 
p->next = t;
p = p->next;
}
else{
q->next=t;
q = q->next;
}
t = t->next;
}
p->next= mid;
q->next = tail;
QuickSort(head, mid);
QuickSort(mid, tail);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

用vs2015写的
http://pan.baidu.com/s/1gfayh4v
若有错误或更好的代码,希望能交流。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/449283
推荐阅读
相关标签
  

闽ICP备14008679号