排序算法复习

排序算法复习

作者:vpoet

mails:[email protected]

注:转载请注明出处

#include <iostream>
#include <windows.h>
using namespace std;

void Bubble_Sort(int UnSort[],int length);
void Select_Sort(int UnSort[],int length);
void Insert_Sort(int UnSort[],int length);
void Merge_Sort(int UnSort[],int length);
void Quick_Sort(int UnSort[],int length);

int main()
{
    int UnSort[10]={5,4,7,12,31,3,8,9,10,2};
	cout<<"*****************************Vpoet************************************"<<endl;
	cout<<"The Unsort Array is: ";
	for(int i=0;i<10;i++)
	{
		cout<<UnSort[i]<<"  ";
	}
	cout<<endl;
	cout<<"**********************************************************************"<<endl;
	cout<<"\t\t\t*********1.Bubble*********\t\t\t"<<endl;
	cout<<"\t\t\t*********2.Select*********\t\t\t"<<endl;
	cout<<"\t\t\t*********3.Insert*********\t\t\t"<<endl;
	cout<<"\t\t\t*********4.Merge *********\t\t\t"<<endl;
	cout<<"\t\t\t*********5.Quick *********\t\t\t"<<endl;
	cout<<"\t\t\t*********0.Exit*********\t\t\t"<<endl;
	cout<<"**********************************************************************"<<endl;
	int ChooseIndex;
	cout<<"Please choose the sort Algo:";
	cin>>ChooseIndex;

	switch(ChooseIndex)
	{
	case 1:
		Bubble_Sort(UnSort,10);
		break;
	case 2:
		Select_Sort(UnSort,10);
		break;
	case 3:
		Insert_Sort(UnSort,10);
		break;
	case 4:
		Merge_Sort(UnSort,10);
		break;
	case 5:
		LARGE_INTEGER BegainTime ;
		LARGE_INTEGER EndTime ;
		LARGE_INTEGER Frequency ;
		QueryPerformanceFrequency(&Frequency);
		QueryPerformanceCounter(&BegainTime) ;
		Quick_Sort(UnSort,10);
		QueryPerformanceCounter(&EndTime);
		cout<<"**********************************************************************"<<endl;
		cout<<"You choosed Quick sort!"<<endl;
		cout<<"The Sort Array is:  ";
		for(i=0;i<10;i++)
		{
			cout<<UnSort[i]<<"  ";
		}
		cout<<endl;
		cout << "Run Time:"<<(double)( EndTime.QuadPart - BegainTime.QuadPart )/ Frequency.QuadPart <<endl;
		cout<<"**********************************************************************"<<endl;
		break;
	case 0:
		cout<<"You Choose To exit,GoodBye!"<<endl;
		break;

	}
	return 1;
}

void Bubble_Sort(int UnSort[],int length)
{
	LARGE_INTEGER BegainTime ;
    LARGE_INTEGER EndTime ;
    LARGE_INTEGER Frequency ;
    QueryPerformanceFrequency(&Frequency);
    QueryPerformanceCounter(&BegainTime) ;
	for(int i=0;i<9;i++)
	{
		for(int j=i+1;j<10;j++)
		{
			if(UnSort[i]>UnSort[j])
			{
				int temp=UnSort[i];
				UnSort[i]=UnSort[j];
				UnSort[j]=temp;
			}
		}
	}
	QueryPerformanceCounter(&EndTime);
	cout<<"**********************************************************************"<<endl;
	cout<<"You choosed Buuble sort!"<<endl;
	cout<<"The Sort Array is:  ";
	for(i=0;i<10;i++)
	{
		cout<<UnSort[i]<<"  ";
	}
	cout<<endl;
	cout << "Run Time:"<<(double)( EndTime.QuadPart - BegainTime.QuadPart )/ Frequency.QuadPart <<endl;
	cout<<"**********************************************************************"<<endl;

}

void Select_Sort(int UnSort[],int length)
{
	LARGE_INTEGER BegainTime ;
    LARGE_INTEGER EndTime ;
    LARGE_INTEGER Frequency ;
    QueryPerformanceFrequency(&Frequency);
    QueryPerformanceCounter(&BegainTime) ;
	int Min;
	for(int i=0;i<10;i++)
	{
		Min=UnSort[i];
		int index=i;
		for(int j=i+1;j<10;j++)
		{
			if(Min>UnSort[j])
			{
				Min=UnSort[j];
				index=j;
			}
		}
		int temp=UnSort[i];
		UnSort[i]=UnSort[index];
		UnSort[index]=temp;
	}
	QueryPerformanceCounter(&EndTime);
	cout<<"**********************************************************************"<<endl;
	cout<<"You choosed Select sort!"<<endl;
	cout<<"The Sort Array is:  ";
	for(i=0;i<10;i++)
	{
		cout<<UnSort[i]<<"  ";
	}
	cout<<endl;
	cout << "Run Time:"<<(double)( EndTime.QuadPart - BegainTime.QuadPart )/ Frequency.QuadPart <<endl;
	cout<<"**********************************************************************"<<endl;
}

void Insert_Sort(int UnSort[],int length)
{
	LARGE_INTEGER BegainTime ;
    LARGE_INTEGER EndTime ;
    LARGE_INTEGER Frequency ;
    QueryPerformanceFrequency(&Frequency);
    QueryPerformanceCounter(&BegainTime) ;
	for(int i=1;i<10;i++)
	{
		int j=i;
		int temp=UnSort[i];
		while(j>0&&temp<UnSort[j-1])
		{
			UnSort[j]=UnSort[j-1];
			j--;
		}
		UnSort[j]=temp;
	}
	QueryPerformanceCounter(&EndTime);
	cout<<"**********************************************************************"<<endl;
	cout<<"You choosed Select sort!"<<endl;
	cout<<"The Sort Array is:  ";
	for(i=0;i<10;i++)
	{
		cout<<UnSort[i]<<"  ";
	}
	cout<<endl;
	cout << "Run Time:"<<(double)( EndTime.QuadPart - BegainTime.QuadPart )/ Frequency.QuadPart <<endl;
	cout<<"**********************************************************************"<<endl;
}

void mergesortEnd(int Unsort[],int first,int mid,int last,int temp[])
{
	int i = first, j = mid + 1;
    int m = mid, n = last;
    int k = 0;

    while (i <= m && j <= n)
    {
        if (Unsort[i] <= Unsort[j])
            temp[k++] = Unsort[i++];
        else
            temp[k++] = Unsort[j++];
    }

    while (i <= m)
        temp[k++] = Unsort[i++];

    while (j <= n)
        temp[k++] = Unsort[j++];

    for (i = 0; i < k; ++i)
        Unsort[first + i] = temp[i];
}

void mergesortfun(int UnSort[],int first,int last,int temp[])
{
	if (first < last)
    {
       int mid = (first + last) / 2;
       mergesortfun(UnSort, first, mid, temp);     //左边有序
       mergesortfun(UnSort, mid + 1, last, temp);  //右边有序
       mergesortEnd(UnSort, first, mid, last, temp); //再将两个有序数列合并
	}
}

void Merge_Sort(int UnSort[],int length)
{
	int *p = new int[length];
	if (p == NULL)
		return ;

	LARGE_INTEGER BegainTime ;
    LARGE_INTEGER EndTime ;
    LARGE_INTEGER Frequency ;
    QueryPerformanceFrequency(&Frequency);
    QueryPerformanceCounter(&BegainTime) ;
    mergesortfun(UnSort, 0, length - 1, p);
	QueryPerformanceCounter(&EndTime);
    delete[] p;

	cout<<"**********************************************************************"<<endl;
	cout<<"You choosed Merge sort!"<<endl;
	cout<<"The Sort Array is:  ";
	for(int i=0;i<10;i++)
	{
		cout<<UnSort[i]<<"  ";
	}
	cout<<endl;
	cout << "Run Time:"<<(double)( EndTime.QuadPart - BegainTime.QuadPart )/ Frequency.QuadPart <<endl;
	cout<<"**********************************************************************"<<endl;
}

void Quick_Sort(int UnSort[],int length)
{
	int i=0;
	int j=length-1;
	int key=UnSort[0];

	if(length>1)
	{
		while(i!=j)
		{
			for(;j>i;j--)
			{
				if(UnSort[j]<key)
				{
					UnSort[i]=UnSort[j];
					break;
				}
			}

			for(;i<j;i++)
			{
				if(UnSort[i]>key)
				{
					UnSort[j]=UnSort[i];
					break;
				}
			}

			UnSort[i]=key;
		}

		Quick_Sort(UnSort,i);
		Quick_Sort(UnSort+i+1,length-i-1);
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-11 22:48:17

排序算法复习的相关文章

C语言排序算法复习

排序算法有很多种,这里在复习和分析的基础上,做一个自己的总结: 首先要知道有哪些排序算法,google一下,有云C语言7大经典排序算法(也有8大).主要包括冒泡排序,快速排序,选择排序,插入排序,希尔排序,归并排序,堆排序,8大的还有基数排序.各有各的版本,代码写法也各不相同.所以这里以整理思路为先,代码只是作为自己的一个备份. 搞清楚的概念:稳定排序和不稳定排序,就看序列中两个值相等的数,排完序之后的相对位置是否改变,如果改变了就不稳定. 内部排序和外部排序,只用到内存即可完成排序的就叫内部排

排序算法复习:直接插入排序、堆排序、快排、冒泡排序

冒泡排序,感觉是最简单的排序: 基本思路:每次把数组中最小的一个元素像气泡一样浮动.固定到最顶端: 从前向后遍历数组,每次拿到一个元素,就执行一遍冒泡: 从数组末尾开始,到当前元素截止,从后向前遍历,每次比较数组中相邻的两个元素,如果后者比较小,就把两者互换. 这样经过第一次冒泡,可以把最小的元素『浮』到数组的首位.第二次冒泡会把第二小的元素『浮』到数组的第二位.直到所有的元素都被『浮动』到正确的位置. 代码极其简单: var BubbleSort = function (array) { va

排序算法复习之代码练习

先贴上代码,以后再慢慢分析. 1 #include <time.h> 2 3 #define MAXSIZE 6000 4 typedef struct List{ 5 int r[MAXSIZE]; 6 int length; 7 }SqList; 8 9 void swap(SqList* L, int i, int j) 10 { 11 int temp = L->r[i]; 12 L->r[i] = L->r[j]; 13 L->r[j] = temp; 14

排序算法复习-冒泡

冒泡排序 public class BubleSort { public static void Sort(int[] array){  for(int i=0;i<array.length;i++){   for(int j=i+1;j<array.length;j++){    if(array[i]>array[j]){     int temp=array[i];     array[i]=array[j];     array[j]=temp;    }   }  } } pu

排序算法合集

排序算法复习大致结束了,主要有以下几种:冒泡排序.选择排序.简单插入排序.希尔排序.归并排序.快速排序.堆排序. #include <iostream> #define MAXSIZE 1000 using namespace std; class SqList{ public: SqList():length(0){} SqList(int length1,int value=0):length(length1) { for(int i=0;i<length;++i) { data[i

复习数据结构:排序算法(一)——插入排序

从这一篇开始,计划复习一下数据结构的基本知识.一来是为了开年之后的找工作,二来是为了想提升自己的编程能力.由于这些数据结构知识点,之前都学习过,这里我们就提炼出每个知识点的核心,以及代码实现. 这篇先说排序算法中的插入排序. 插入排序是一种稳定排序算法,属于内排序.适合少量数据量的排序. 当输入数组已经排好序时,插入排序需要O(n),快排需要O(n^2). 当输入数组倒序排列时,插入排序时复为:O(n^2). 平均时间复杂度:O(n^2). 代码实现如下: #include<iostream>

数据结构与算法复习(一) 排序算法(I)

这篇文章将会介绍最常见的排序算法(使用 JavaScript 语言实现) PS:这里我会尽量使用语言无关的语法去写,大家不要太在意语言,重要的是算法的实现思路 1.冒泡排序 将数组分为有序区(左边)和无序区(右边) 每次从无序区的最后一个元素开始,一直向前冒泡到无序区的第一个位置,使其变成有序 function swap(A, i, j) { if (i === j) return [A[i], A[j]] = [A[j], A[i]] } function bubbleSort(A) { fo

基本算法复习--排序(java实现)

日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序,甚至还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序等. 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端. 代码 /**   * 冒泡法排序<br/> * <li>比较相邻的元素.如果第一个比第二个

复习排序算法

一. 冒泡排序算法 1.第一次排序时将序列[0 ~ n - 1]中从前往后进行两个相邻元素的比较,若前者较大则交换,比较n-1次;当第一趟排序结束时,序列最大的元素就被交换到位置n-1上,就如同一个气泡,一步一步往后翻滚,直到最后一位. 2.重复步骤1,在第i趟时需要翻滚n-i-1次,每趟决定一个元素的位置,一共需要n-1趟. 比如,初始序列: [1, 5, 4, 3, 2] 第1趟: [1, 4, 3, 2 ] 5 第2趟: [1, 3, 2 ] 4, 5 ...... - (void)bub