実現の「データ構造とアルゴリズム」実験4レポート//クイックソート

部屋番号10から414
名:
日:2018年12月27日
プログラム名:速いソート
実験:リアライズ(D)のクイックソート

まず、目的と要件(ニーズ分析):

1、大きい順に小さいからクイックソートアルゴリズムデータ・シーケンスを使用して任意の入力シーケンス順序データ。
実験開発:10.6(a)と比較するための10.6(b)のパフォーマンス。

第二に、基本的な考え方、原則と設計プログラムの説明:

(プログラム、データ構造、入力/出力設計、シンボリック名説明等の構造を含む)
プログラム構造
1.ヘッダファイル
の#include <stdio.hに>
する#include <STDLIB.H>
の#define MAX 100
機能2.機能
クイック主な機能は、
(高INT、低のINT)クイックソートを無効
3.メイン関数を
データ入力インタフェースと機能の実装を提供します。
第三に、プログラムのアイデア
ソートされた配列となるように設定ではA [0] ... A [Nであり、 -1]、 それは全ての数よりも小さい場合、鍵データとして(最初の数は、通常、アレイを選択された)最初のデータのいずれかを選択しますそれの前に配置され、その数よりも、すべての大きなは、その背後にクイックソートへの旅として知られているプロセスを入れています。これは、クイックソートアルゴリズムを選別的に安定であること、値の複数の同一の相対位置は、アルゴリズムの終了時に変動することはない、ことは注目に値します。
:クイックソートアルゴリズムトリップ
; I = 0、J = N-1:1)を設定二つの変数I、J、順序の開始時刻
、キーに割り当てられた鍵データ、すなわちである第1の配列要素に2) =キー[0];
3)すなわち、正面(J-)から検索の開始後、最初のキーは小さい値[j]は、割り当てられたA [j]が値よりも見つけ、前方検索Jから始まります[I];
4)iが後方探索開始から、すなわち逆方向検索(I ++)の開始前に、A [i]のを見つける最初のキーよりも大きい、A [i]とは、[J]の値が割り当てられ;
で、キー未満でない(3,4-ステップ、修飾値を見つけられませんでした、すなわち3 A [j]を4 A [i]は、時間のキーより大きくない; 5)繰り返し手順3と4は、iがjは=まで。あなたはときに私のために交換、Jポインタの位置変わらない。さらに、私== jのこと、資格の価値を発見した見つけるまで変えJ、iの値は、このようなことがj = J-1には、私は、私+ 1 =このプロセスは、正確に時間でなければなりませんI + J-または完了したので、その今回のサイクルの終わり)で。

第三に、デバッグプロセスで生成されたプログラムを実行し、対策を講じの問題:

	调试过程中还是出现了一些拼写错误,经检查后都能及时修正。有些是语法设计上的小错误,比如一些参变量的初始值设置错误,使得程序调试出错。分析后纠正了这些结果,并尽量改进了算法的性能,减小时间复杂度。 

この実験を通じて、クイックソートの保管方法についてより深く印象。

第四に、ソースコードとコメント:

#include <stdio.h>  
#include <stdlib.h>  
#define MAX 100  
int a[MAX + 1];
int n;  
//--------------------------------快速排序函数------------------------------- 
void QuickSort(int low, int high)  
{  
    	int i,j,t,temp;  
    	if(low>high)  
    		return;  
    	temp=a[low];  
    	i=low;  
   	 	j=high;  
    	while(i!=j)  
    	{  
        	while(a[j]>= temp&&i<j)  
        	{	  
            	j--;  
        	}  
        	while(a[i]<=temp&&i<j)  
        	{  
            	i++;  
        	}  
        	if(i<j)  //交换a[i]和a[j] 
        	{  
            	t=a[i];  
            	a[i]=a[j];  
            	a[j]=t;  
        	}  
    	}  
    	a[low]=a[i];  
    	a[i]=temp;  
    	QuickSort(low,i-1);  
    	QuickSort(i+1,high);  
}  

//--------------------------------主函数------------------------------- 
int main()  
{  
		printf("\t\t\t-----------------------------------\n");
    	printf("\t\t\t---------程序名:快速排序---------\n");  
    	int i,j,t,count=0;  
    	int N;  
    	printf("\t\t\t请输入数据的个数:\n\t\t\t");  
    	scanf("%d",&N);  
    	printf("\t\t\t");
    	for(i=0;i<N;i++)  
    	{  
        	scanf("%d",&a[i]);  
             
    	}  
    	QuickSort(0,i-1);  //调用快速排序函数 
    	printf("\t\t\t排序后的数据:\n\t\t\t");  
    	for(j=0;j<i;j++)  
    	{  
        	printf("%d ",a[j]);  
    	}  
    	printf("\n"); 
    	printf("\t\t\t-----------------------------------\n");
    	return 0;  
}  

6.3.5動作出力:

输入10个无序的数据,调用快速排序函数进行从小到大的排序 

ここに画像を挿入説明

第六に、アイデアと経験:

公開された35元の記事 ウォンの賞賛1 ビュー1861

おすすめ

転載: blog.csdn.net/qq_40672635/article/details/90049984