快排之单FOR搞定
来源:互联网 发布:9分达人阅读 知乎 编辑:程序博客网 时间:2024/05/16 05:36
单FOR版快排。
平常的快排就不介绍了: 进入正题
单FOR快排的思想和平常的快排一样,将数组的起作为排序的KEY,就是将比KEY小的放到KEY的左边,比KEY大的放到KEY的右边。递归调用
但是比双FOR少了一层循环
用双指针错位的方式来巧妙实现 图解 : KEY = 4,i 为起始 ,j为下一个作为初始化。这里J会循环到末尾,当j<i的时候,i++; 这里i++的作用相当于普通快排中的从左边找到第一个KEY大的数,j始终++,作用:找到比KEY小的数
SWAP的时候,就将小的移到了左边,大的移到了右边,图中第一次循环4>2 i++ swap,没有改变 ,
一次循环结束后j = 5 , i不动,J继续++,j=3,3<4成立,交换,i指向的是5,5和3对调
依次类推到J加到末尾的时候,将4放到I所指的位置上就完成了一次快排操作。
上代码 ,根据代码理解吧。 数组版本
#include <stdio.h>void quicksort(int *p,int begin,int end){//单for循环搞定if (begin < end){int i = begin;//p[begin]作为keyfor (int j = i + 1; j <= end;j++){//如果J<KEY 交换 if (p[j] < p[begin]){i++;int temp = p[i];p[i] = p[j];p[j] = temp;}}// 将 KEY放到分好的位置 此时I的位置就是放KEY的位置int temp = p[i];p[i] = p[begin];p[begin] = temp;quicksort(p, begin, i - 1);quicksort(p, i + 1, end);}}int main1(){int s[10] = { 5, 4, 3, 10, 7, 8 };quicksort(s, 0, 6);for (int i = 0; i < 6;i++){printf("%d ", s[i]);}system("pause");return 0;}
链表版本:
#include<stdio.h>typedef struct LinkListNode {int data;struct LinkListNode* next;}Node;void add(Node* phead,int data){//头插法if (phead==NULL){return;}Node* node1 = malloc(sizeof(Node));node1->data = data;node1->next = NULL;Node *pbck = phead;while (pbck->next!=NULL){pbck = pbck->next;}pbck->next = node1;}void listquciksort(Node * phead, Node *end){if (phead == end){return;}else{int key = phead->data;Node * p1 = phead;for (Node *p2 = phead->next; p2 != end; p2 = p2->next){if (p2->data<key){p1 = p1->next;int temp = p1->data;p1->data = p2->data;p2->data = temp;}}int temp = phead->data;phead->data = p1->data;p1->data = temp;listquciksort(phead, p1);listquciksort(p1->next, end);}}int main(){Node* head = malloc(sizeof(Node));head->data = 10;head->next = NULL;add(head, 11);add(head, 13);add(head, 1);add(head, 5);add(head, 6);Node * pback;pback = head;while (pback->next!=NULL){pback = pback->next;}listquciksort(head,NULL );while (head=head->next){printf("%d ", head->data);}system("pause");}
阅读全文
0 0
- 快排之单FOR搞定
- Python:三句搞定快排
- 一行python代码搞定快排
- 20行代码搞定JAV快排
- 单链表之快排
- 单链表之快排
- 排序 之 快排
- 数据结构之快排
- java之快排
- 数据结构之快排
- 数据结构之快排
- 排序之 快排
- 排序之-----快排
- 排序之快排
- 数据结构之快排
- 排序之快排
- 快排之C++
- 快排之标准实现
- UVALIVE4394,区间DP好题
- BMP文件格式详解
- NOIP2015 D2 [stone][substring]
- webstrom快捷键
- PAT甲级真题及训练集(16)--1032. Sharing (25)
- 快排之单FOR搞定
- 隐藏终端和暴露终端
- hdu 1242 Rescue (bfs+优先队列)
- js中setInterval与setTimeout的区别及换背景样例
- idea创建maven项目
- 缩小javascript文件大小之缩编、混淆
- 新手搭建Jenkins进行持续集成
- 按钮快速点击过滤处理
- iis设置允许或禁止访问的文件类型,以及能够解析的文件类型