`

内部排序(一)

 
阅读更多

最近在实验室恰逢师兄师姐们的校招季,会有很多面试笔试题考一些基本的算法,其中较为常用的就是排序算法,当然这里指的仅仅是内部排序,处于复习的目的,回顾了一下在大二时候学习的一些排序方法,算是一个记录

 

内部排序大概来说有10种,分别是,选择排序,冒泡排序,插入排序,归并排序,冒泡排序,基数排序,堆排序,桶排序,计数排序,布尔排序,今天主要说一说最常用的前面五种算法,也是面试或者笔试中较为常用的

 

话不多少,代码奉上,基本的说明都在注释里面交代了

/*
Author:luchi
Date:2015/10/22
*/
#include<iostream>
using namespace std;

void printResult(int* a,int n,char* type){
	cout<<type<<":  ";
	for(int i=0;i<n;i++){
		cout<<a[i]<<" ";
	}
	cout<<endl;
}

/*Choose sorting
直接排序比较简单,扫描N-1趟,每趟选取一个最小的 
*/


void ChooseSorting(int *a ,int n) {
	
	for(int i=0;i<n-1;i++){
		
		for(int j=i+1;j<n;j++){
			if(a[j]<a[i]){
				int temp=a[i];
				a[i]=a[j];
				a[j]=temp;
				
			}
		}
		
	}
}


/*BubbleSort
冒泡排序是交换排序N-1趟,每一趟把最大的转到最后面 

*/




void BubbleSort(int*a,int n) {
	
	for(int i=1;i<=n-1;i++) {
		
		for(int j=0;j<=n-i-1;j++){
			
			if(a[j]>a[j+1]){
				int temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
	}
	
	
}

/*
InsertionSort 
*/ 
void InsertionSort(int* a,int n){
	
	for(int i=1;i<n;i++){
		
		int cur=a[i];
		
		int j;
		for(j=i-1;j>=0;j--){
			
			if(a[j]>cur)	{
				a[j+1]=a[j];
			}else break;
		}
		a[j+1]=cur;
	}
	printResult(a,10,"InsertionSort");
}

/*MergeSort
递归排序,讲一个数组分成两个部分,对这两个部分的数据进行排序,然后将两部分的
(此时已经是有序的)进行Merge操作,也就是重新合并成一个有序的数组

T(n)=2T(n/2)+O(n) 

递推可以知道时间复杂是Lg(n)*n 

*/

void Merge(int * a,int begin,int mid,int end){
	
	int *b=new int[end-begin+1];
	int left_begin=begin;
	int left_end=mid;
	int right_begin=mid+1;
	int right_end=end;
	int  pos=0;
	while(left_begin<=left_end && right_begin<=right_end){
		if(a[left_begin]<a[right_begin]){
			b[pos++]=a[left_begin];
			left_begin++;
		}else{
			b[pos++]=a[right_begin];
			right_begin++;
		}
	}
	if(left_begin>left_end){
		for(int i=right_begin;i<=right_end;i++){
			b[pos++]=a[i];
		}
	}else{
		for(int i=left_begin;i<=left_end;i++){
			b[pos++]=a[i];
		}
	}
	for(int i=begin;i<=end;i++){
		a[i]=b[i-begin];
	}
}
void MergeSort(int * a,int begin,int end){
	
	if(begin==end)return;
	int mid=(begin+end)/2;
	MergeSort(a,0,mid);
	MergeSort(a,mid+1,end);
	Merge(a,begin,mid,end);
	
}

/*quick_sort
快速排序属于较为重要的排序
基本思想就是对于一个数字,首先以第一个元素组为基准,
比他小的放在左边,比他大的放在右边
然后分别对左右两边再进行以上操作即可 
*/

void quickSort(int*a,int begin,int end){
	

	if(begin>=end)return;
	int seperator=a[begin];
	int count=0;
	for(int i=begin+1;i<=end;i++){
		if(a[i]<seperator){
			
			int temp=a[count+begin+1];
			a[count+begin+1]=a[i];
			a[i]=temp;
			count++;
			
		}
	}
	int temp=a[begin];
	a[begin]=a[begin+count];
	a[begin+count]=temp;
	quickSort(a,begin,begin+count-1);
	quickSort(a,begin+count+1,end);
}


int main(){
	int a[]={10,2,11,102,34,29,123,76,2,-7};
//	ChooseSorting(a,10);
//	BubbleSort(a,10);
//	InsertionSort(a,10);
//	MergeSort(a,0,9);
	quickSort(a,0,9);
	printResult(a,10,"QuickSort");
	return 0;
}

 今晚已经有点晚了,后面五种排序过些日子再弄出来

2
1
分享到:
评论

相关推荐

    内部排序图形化界面

    本文将详细探讨一款基于C++开发的内部排序图形化界面,该界面采用Microsoft Foundation Classes (MFC)库构建,实现了包括冒泡法、快速排序在内的六种常见排序算法,并提供了实时查看排序过程的功能,为学习和理解...

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录

    在本文中,我们将深入探讨内部排序算法,包括它们的工作原理、优缺点以及如何使用Python、JavaScript、Java、Go和PHP这些编程语言来实现它们。 1. 冒泡排序:冒泡排序是一种简单的交换排序方法,通过不断比较相邻...

    各种排序代码内部排序内部排序代码

    在计算机科学领域,内部排序是数据处理中一个关键的概念,主要指的是在内存中对一组数据进行排序的过程。这里我们关注的焦点是各种排序算法的实现,包括选择排序、冒泡排序以及归并排序。这些算法在不同的场景下有...

    内部排序算法分析

    在计算机科学领域,内部排序是数据处理中至关重要的一部分,它涉及到如何有效地对内存中的数据进行排列。本主题将深入探讨内部排序算法,并结合C语言代码进行解析。内部排序,顾名思义,是指数据在主存储器(内存)...

    各种内部排序方法及其比较实验报告

    "各种内部排序方法及其比较实验报告" 内部排序是指在计算机内存中对数据进行排序的方法。内部排序方法有很多,常见的有直接插入排序、折半插入排序、希尔排序、冒泡排序、快速排序、堆排序、归并排序等。 直接插入...

    【排序结构5】 基于比较的内部排序总结

    【排序结构5】基于比较的内部排序总结 在计算机科学中,排序是将一组数据按照特定顺序排列的过程。内部排序,或称为内存排序,是指数据记录在内存中进行的排序,与外部排序(数据量太大无法全部装入内存)相对。本...

    内部排序小结 包括几乎所有的内部排序算法

    内部排序是计算机科学中处理数据的关键技术之一,它涉及到如何有效地组织和重新排列一组数据,以便根据特定的顺序(如数值大小、字母顺序等)进行访问。本篇内容主要总结了多种内部排序算法,包括它们的特点、效率...

    六种内部排序算法比较:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序。

    本话题主要探讨六种内部排序算法:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序以及堆排序。这六种排序算法各有优劣,适用于不同的场景,接下来我们将逐一进行详细阐述。 1. **直接插入排序**: 直接...

    内部排序算法比较 课程设计

    【内部排序算法比较课程设计】主要关注的是对六种经典的内部排序算法的性能对比,包括起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序和堆排序。这些算法是计算机科学中用于对数据进行排序的基础工具,各...

    数据结构课程设计(内部排序算法比较_C语言)

    ### 数据结构课程设计:内部排序算法比较_C语言 #### 一、课题背景与意义 排序作为数据结构中的重要组成部分,在实际开发中具有广泛的应用场景。理解不同排序算法的特点及其适用场景,对于提高程序效率和解决问题...

    内部排序算法的性能分析

    3. **插入排序**:插入排序的工作原理类似于我们手动排序一副扑克牌,将每个元素插入到已排序的部分。插入排序在最好情况(已排序数组)下时间复杂度为O(n),但在最坏情况下(反序数组)为O(n^2)。 4. **希尔排序**...

    各种内部排序演示

    本资源"各种内部排序演示"提供了对八种经典内部排序算法的可视化展示,包括泡沫排序、堆排序、插入排序、归并排序、快速排序、基数排序、选择排序和希尔排序。通过这些.swf文件,学习者可以直观地理解每种排序算法的...

    内部排序算法比较 数据结构课程设计

    1、本演示程序对以下6种常用的内部排序算法进行实测比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。 2、待排序表的表的元素的关键字为整数,表长不小于100;其中的数据要用伪随机数产生...

    内部排序实验报告

    在《内部排序实验报告》中,明确了项目目标是创建一个程序,用于演示并比较六种常用的内部排序算法的性能。这六种算法分别是起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序和堆排序。实验关注于两种主要...

    C语言数据结构内部排序算法及比较

    本文将深入探讨“C语言数据结构内部排序算法及比较”这一主题,结合个人课程作业的经验,对一些核心概念进行阐述,并对常见的内部排序算法进行比较。 首先,数据结构是组织和管理数据的方式,它包括数组、链表、树...

    几种内部排序

    本文将重点介绍四种基本的内部排序算法:起泡排序、快速排序、选择排序和插入排序,它们都是基于线性表的顺序存储结构来实现的。 1. **起泡排序**(Bubble Sort) 起泡排序是一种简单直观的排序算法,通过重复遍历...

    数据机构综合课设内部排序算法比较.docx

    快速排序是最著名的内部排序算法之一,由分治策略实现。通过选择一个基准值并将数组分为两部分,使得一部分的所有元素小于另一部分。快速排序的平均时间复杂度为O(n log n),但在最坏情况下为O(n^2)。 7. **简单...

    内部排序算法比较

    **内部排序算法比较** 在计算机科学中,内部排序是指数据在内存中进行的排序过程,无需额外的存储设备。本报告主要关注了六种常见的内部排序算法:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序和堆...

    内部排序算法的比较

    内部排序是计算机科学中一种重要的数据处理方法,它是指在内存中完成的排序过程,无需额外的存储空间。本篇文章将深入探讨六种常见的内部排序算法:希尔排序、直接选择排序、快速排序、直接插入排序、堆排序以及冒泡...

Global site tag (gtag.js) - Google Analytics