1. 程式人生 > >資料結構 快速排序氣泡排序

資料結構 快速排序氣泡排序

#include<iostream>
#include<time.h>
#include<stdlib.h>//使用庫函式srand和rand函式
using namespace std;
const int Max=10;
void Creat(int r[],int n);
void BubbleSort(int r[],int n);//起泡排序 
int Partition(int r[],int first,int end) ;//一次劃分
void QuickSort(int r[],int first ,int end);//快速排序

int main()
{
	int a[Max+1]={0};
	int b[Max+1]={0};
	int i=0;
	Creat(a,Max);
	for(i=1;i<=Max;i++)//將陣列a複製一份到陣列b
	b[i]=a[i];
	cout<<"對於無序序列:";
	for(i=1;i<=Max;i++)
	cout<<b[i]<<" ";
	cout<<endl;
	BubbleSort(b,Max);
	cout<<"執行起泡排序後,元素為:";
	for(i=1;i<=Max;i++)
	cout<<b[i]<<" ";
	cout<<endl;
	cout<<"對於無無序序列:";
	for(i=1;i<=Max;i++)
	cout<<a[i]<<" ";
	cout<<endl;
	QuickSort(a,1,Max);
	cout<<"執行快速排序後,元素為:";
	for(i=1;i<=Max;i++)
	cout<<a[i]<<" ";
	cout<<endl;
	return 0; 
 } 
 
 
 
 
 void Creat(int r[],int n)
 {
 	int i=0;
 	srand(time(NULL));
 	for(i=1;i<=n;i++)
 	r[i]=1+rand()%100;//待排序記錄為兩位數
	  
 }
 void BubbleSort(int r[],int n)
 {
 	int exchange=n;
 	int bound=n;
 	while(exchange!=0)
 	{
 		bound=exchange;
 		exchange=0;
 		int j;
 		for(j=1;j<bound;j++)
 		if(r[j]>r[j+1])
 		{
 			r[0]=r[j];
 			r[j]=r[j+1];
 			r[j+1]=r[0];
 			exchange=j;//記錄每一次交換的位置 
		 }
	 }
 }
 int Partition(int r[],int first,int end)
 {
 	int i=first;
 	int j=end;//初始化
	 while(i<j)
	 {
	 	while(i<j&&r[i]<=r[j])
	 	j--;//右側掃描
		 if(i<j)
		 {
		 	r[0]=r[i];
		 	r[i]=r[j];
		 	r[j]=r[0];
		 	i++;
		  } 
		  while(i<j&&r[i]<=r[j])
		  i++;//左側掃描
		  if(i<j)
		  {
		  	r[0]=r[i];
		  	r[i]=r[j];
		  	r[j]=r[0];
		  	j--;
		   } 
	  } 
	  return i;//i為軸記錄的最終位置 
  } 
  void QuickSort(int r[],int first,int end)
  {
  	if(first<end)
  	{
  		//區間長度大於一執行一次劃分,否則遞迴結束
		  int pivot=Partition(r,first,end);
		  QuickSort(r,first,pivot-1);//遞迴對左側子序列進行快速排序
		  QuickSort(r,pivot+1,end);//遞迴實現對右側子序列的快速排序 
	  }
   }