对序列p的分割过程: 首先,在序列的第一个、中间一个及最后一个元素中
选取中项,得p(k),然后设置两个指针i和j分别指向序列的起始和最后的位置.
Status Quick_Sort(ElemType A[],int left,int right){
tmp=A[(left+right)/2];
do{
while(A[i]<tmp&&i<right) i++;
while(A[j]>tmp&&j>left) j--;
if(i<=j){
swap(A[i],A[j]);
i++;
j--;
}
}while(i<=j);
if(left<j) Quick_Sort(A,left,j);
if(i<right) Quick_Sort(A,i,right);
return 1;
}
===================================================================
插入排序的基本思想是,经过i-1遍处理后,A[0..i-1]己排好序。第i遍处理仅将A[i]插入A[0..i-1]的适当位置,使得A[0..i]又是排好序的序列。要达到这个目的,我们可以用顺序比较的方法。首先比较A[i]和A[i-1],假如A[i-1]≤ L[i],则A[0..i]已排好序,第i遍处理就结束了;否则交换A[i]与A[i-1]的位置,继续比较A[i-1]和A[i-2],直到找到某一个位置j(0≤j≤i-1),使得L[j] ≤L[j+1]时为止.
Status Insertion_Sort(List A){
for(i=1;i<len;i++){
tmp=A[i];
j=i-1;
while(j>=0&&A[j]>tmp){
A[j+1]=A[j];
j--;
}
A[++j]=tmp;
}
return 1;
}
==========================================================================
选择排序的基本思想是对待排序的记录序列进行n-1遍的处理,第i遍处理是将A[i..n]中最小者与A[i]交换位置。这样,经过i遍处理之后,前i个记录的位置已经是正确的了。
选择排序算法可实现如下:
Status Selection_Sort(List A);
len=ListLength(A);
for(i=0;i<len-1;i++){
min=i;
for(j=i+1;j<len;j++)
if(A[j]<A[min])
min=j;
if(i!=min){
swap(A[i],A[min]);
}
}
return 1;
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |