룸 번호 10-414
이름 :
날짜 : 2018년 12월 27일
프로그램 이름 : 빠른 정렬
실험 : 실현 (D) 빠른 정렬
첫째, 목적과 요구 사항 (요구 분석) :
1, 큰 순서로부터 작은 퀵 알고리즘 데이터 시퀀스를 사용하여 임의의 입력 시퀀스 순서 데이터.
실험 개발 : 10.6 (a)와 비교 10.6 (b)의 성능을 제공합니다.
둘째, 기본 개념, 원리 및 설계 프로그램 설명 :
(상기 프로그램의 구조, 데이터 구조들, 입력 / 출력 디자인 심볼 이름 정보 등을 포함)
는 프로그램의 구조
(1) 헤더 파일
#INCLUDE <STDIO.H>
#INCLUDE <stdlib.h>
#DEFINE 100 MAX
함수 2. 함수
퀵 주요 기능은
(높은 INT, 로우 INT)을 퀵 무효화
3. 기본 기능
데이터 입력 인터페이스와 기능의 구현을 제공한다.
셋째, 프로그램의 아이디어
세트는 정렬 된 어레이가있다 수 [0] ... A는 [N은 -1, 키 데이터로서 제 1 데이터 (제는 통상 어레이 선택된다) 중 하나를 선택하고 그 모두의 수보다 적은 의 수보다 모두 큰 그것의 앞에,에 위치는 뒤에 빠른 정렬 여행이라는 프로세스를 배치됩니다. 그것은 빠른 정렬 알고리즘을 정렬 안정적 즉, 값이 상기 복수의 동일한 상대 위치를 알고리즘의 끝에서 변동될 수없고, 주목할 만하다.
: 퀵 알고리즘 트립
난, j는, 순서의 시작 시간이 1) 집합 개의 변수 : I = 0 일을 J = N-1,
2) 키에 할당 된 키 데이터와 제 배열 요소로, 즉 = 키 [0]
. 3), 즉, 전면 (J-)로부터 탐색 개시 후, 최초의 키는 이하의 값이 [J], 지정된 A [J] 값보다 찾을 순방향 검색 J부터 A [I]
. 4) I를 역방향 탐색의 시작 전에, 즉 후방 검색 개시로부터는 (ⅰ ++)는 A를 찾기 위해 제 1 키보다 크다 [I]은이 [I]은 [J]의 값을 할당 ;
에서는 키 이상인 (3,4- 공정과, 정규화 된 값을 찾지 못함, 즉 3 A [J] 4 A가 [I]은 시간 키보다 크지 5)를 반복하여 3 단계, 4 나 일본을 =까지. 만약 때 대한 교환, J 포인터 위치 변경있다. 또한, I == J 즉, 정규화 된 값을 발견 찾을 때까지 변화 J, I의 값은 즉, J = J-1 난 + 1 = 과정은 정확히 시간을해야합니다 내가 + 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个无序的数据,调用快速排序函数进行从小到大的排序