[数据结构和算法]快速排序笔记

特点:
1.是冒泡的改进
2.是一个递归的过程
3.不稳定

4.时间复杂度:O(nlogn)

设要排序的数组是A[0]...A[n-1],首先取数组的第一个数作为关键数据,
然后将所有比它小的数都放到它的前面,比他大的都放到他的后面,这个过程被称为一趟快速排序

算法步骤:
1.设置两个变量i,j,排序开始i = 0, j = N-1;
2.以第一个数组元素作为关键字,Key =
A[0];
3.从J开始向前搜索,即由后开始向前搜索j--,
找到第一个小于key的值A[j],将A[j]赋值给A[i]
4.从I开始向后搜索,即由前开始向后搜搜i++,
找到第一个大于key的值A[i],将A[i]赋值给A[j]
5.重复3,4步,直到i=j;
(3,4步中,没有找到符合条件的值,即3中A[j]不小于key,4中A[i]不大与key的时候改变j,i的值,
使得j=j-1
, i = i
+1,直至找到为止,找到符合条件的值,进行交换的时候i,j位置不变
i==j这一个过程一定正好是i+或者j-完成时候,此时令循环结束)


package src;

public class QSort
{

/**
* @param args
*/
public static void main(String[] args)
{
// TODO 自动生成方法存根
quicksort qs = new quicksort();
int data[] = {44,22,2,32,54,22,88,77,99,11};
qs.data = data;
qs.sort(0, qs.data.length-1);
qs.display();
}

}

class quicksort
{
public int data[];

private int partition(int sortArray[],int low,int hight)
{
int key = sortArray[low];

while(low<hight)
{
while(low<hight && sortArray[hight]>=key)
hight--;
sortArray[low] = sortArray[hight];

while(low<hight && sortArray[low]<=key)
low++;
sortArray[hight] = sortArray[low];
}
sortArray[low] = key;
return low;
}

public void sort(int low,int hight)
{
if(low<hight)
{
int result = partition(data,low,hight);
sort(low,result-1);
sort(result+1,hight);
}

}

public void display()
{
for(int i=0;i<data.length;i++)
{
System.out.print(data[i]);
System.out.print(" ");
}
}
}

[数据结构和算法]快速排序笔记

时间: 2024-10-06 15:26:13

[数据结构和算法]快速排序笔记的相关文章

数据结构和算法绪论笔记整理

程序设计 = 数据结构 + 算法 数据结构:就是数据元素相互之间存在的一种或多种特定关系的集合(关系就是讲逻辑结构,集合就是将物理结构); a.逻辑结构            集合:数据元素之间只有"同属于一个集合"的关系            线性结构:数据元素之间存在一个对一个的关系            树形结构:数据元素之间存在一个对多个关系            图形结构或网状结构:数据元素之间存在多个对多个的关系 b.物理结构(存储结构)            顺序存储:数

数据结构与算法学习笔记(一)

我们把数据结构分为逻辑结构和物理结构 逻辑结构:是指数据对象中数据元素之间的相互关系. 物理结构:是指数据的逻辑结构在计算机中的存储形式. 四大逻辑结构: 集合结构:集合结构中的数据元素除了同属于一个集合外没有其他的相互关系. 线性结构:线性结构中的数据元素之间是一对一的关系. 树形结构:树形结构中的元素之间存在一种一对多的层次关系. 图形结构:图形结构的元素之间是多对多的关系. 物理结构:物理结构主要研究如何把数据元素存储到计算机的存储器中. 数据元素的存储形式: 顺序存储:把数据元素存放在地

数据结构和算法-学习笔记1

什么是数据结构? 数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科. 程序设计=数据结构+算法(简单说就是关系,数据元素相互之间存在的一种或多种特定关系的集合) 数据结构分为逻辑结构和物理结构 逻辑结构(集合结构.线性结构.树形结构.图形结构) 数据对象中的数据元素之间的相互关系 集合机构 集合结构中的元素除了同属于一个集合外,他们之间没有其它关系 线性结构 线性结构中的数据元素之间是一对一的关系 树形结构 树形结构中的数据元素之间存在一种一对多的

数据结构与算法-----快速排序

快速排序的原理是,每一次排序都找一个基准数,然后比基准数大的元素,放到基准数的右侧,比基准数小的元素放到基准的左侧,那么最核心的就是找到基准数的位置, 把基准数放到它应在的位置.现在我们对6 1 2 7 9 3 4 5 10 8 进行排序.  首先找一个基准数,就是一个参照数, 用来进行比较. 为了简单起见,那就选第一个数6作为基准数好了,我们要做的事就是找到6 所在的位置,让6右边的数比它大,让6左边的数比它小 如下形式. 3 1 2 5 4 6 7 9 10 8 我们怎么才能找到6 应该在的

《Java数据结构与算法》笔记-CH5-链表-4用链表实现堆栈

1 //用链表实现堆栈 2 /** 3 * 节点类 4 */ 5 class LinkS { 6 private long data; 7 public LinkS next; 8 9 public LinkS(long d) { 10 this.data = d; 11 } 12 13 public String toString() { 14 return String.valueOf(data); 15 } 16 } 17 18 /** 19 * 链表类 20 */ 21 class Li

《Java数据结构与算法》笔记-CH5-链表-5用双端链表实现队列

1 //用双端链表实现队列 2 /** 3 * 节点类 4 */ 5 class LinkQ { 6 private long data; 7 public LinkQ next; 8 9 public LinkQ(long d) { 10 this.data = d; 11 } 12 13 public String toString() { 14 return String.valueOf(this.data); 15 } 16 } 17 /** 18 * 双端链表类 19 */ 20 cl

数据结构 试探法算法学习笔记

彩票1-29  输出7个不相同的数 #include<stdio.h> int main() { int i[7],j; for(i[0]=1;i[0]<=29;i[0]++) for(i[1]=1;i[1]<=29;i[1]++) { if(i[0]==i[1]) continue; for(i[2]=1;i[2]<=29;i[2]++) { if(i[0]==i[2]||i[1]==i[2]) continue; for(i[3]=1;i[3]<=29;i[3]++

数据结构与算法学习笔记(四)

单链表的整表创建 声明一结点p和计数器变量i 初始化一空链表L 让L的头结点的指针指向NULL,即建立一个带头结点的单链表 循环实现后继结点的赋值和插入 头插法:从一个空表开始,生成新节点,读取数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头上,直到结束位置.简单来说就是把新加进的元素放在表头后的第一个位置 先让新结点的next指向头结点之后 然后让表头的next指向新结点 void CreateListHead (LinkList *L,int n) { LinkList p; i

数据结构和算法-学习笔记3

线性表(List) 定义:由零个或多个数据元素组成的有限序列. 关键词 ①序列:它是一个序列,元素之间是有先后顺序的 ②若元素存在多个:第一个元素无前驱,而后一个元素无后继,其它元素只有一个前驱和后继 ③有限的 数学语言定义如下 若将线性表记为(a1,...,ai-1,ai,ai+1,...,an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素 线性变元素的个数N(n>=0)定义为线性表的长度,当n=0是,称为空表. 抽象数据类型 数