欢迎光临
我们一直在努力

简单的排序算法实现

#include <stdio.h>#include<stdlib.h>void insertSortForward(int orig[], int size);void insertSortBackward(int orig[], int size);void bubbleSort(int orig[], int size);void selectSort(int orig[], int size);void shellSort(int orig[], int size);void HeapSort(int orig[], int size);void QuickSort(int[], int, int);void swap(int *, int *);int Partition(int orig[], int left, int right);void BuildHeap(int orig[],int size);void HeapAdjust(int[], int, int);int main() {    int a[] = { 1,3,2,4,5,7,0,8,8 };    //bubbleSort(a, 7);
   
//insertSortForward(a, 8);
   
//insertSortBackward(a, 8);
   
//selectSort(a, 8);
   
//shellSort(a, 8);
   
//HeapSort(a, 9);
   QuickSort(a,
0, sizeof(a)/sizeof(a[0])-1);    for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)        printf(%d, a[i]);    printf(\n);
   system(
“pause”);    return 0;
}
void shellSort(int orig [], int size) //Shell排序{    int i, j, k, t;
   k = (size /
2) % 2 == 0 ? size / 2 + 1 : size / 2;
   
while (k > 0)
   {        
for (int j = k; j < size; j++) {
           t = orig[j];
           i = j – k;            
while (i >= 0 && t < orig[i]) {
               orig[i+k] = orig[i];
               orig[i] = t;
               i = i – k;
           }
       }
       k /=
2;        if (k==0)
       {            
break;

       }
   }    for (int i = 0; i < size; i++)        printf(%d, orig[i]);    printf(\n);
       
}
void HeapSort(int orig[], int size){
   BuildHeap(orig, size);    
for (int i = 0; i < size; i++)        printf(%d, orig[i]);    printf(\n);    while(size > 0)
   {        
printf(%d, orig[0]);
       orig[
0] = orig[ –size];
       HeapAdjust(orig,
0,size);
   }
}
void QuickSort(int orig[], int left, int right){    if (left < right) {        int point = Partition(orig, left, right);
       QuickSort(orig, left, point –
1);
       QuickSort(orig, point +
1, right);
   }
}
void swap(int *a, int*b) {    int temp;
   temp = *a;
   *a = *b;
   *b = temp;
}
int Partition(int orig[], int left, int right){    int prikey = orig[right];
   
while (left<right)
   {        
while (left<right&&prikey >= orig[left]) left++;
       swap(&orig[left], &orig[right]);        
while (left<right&& prikey <= orig[right]) right–;
       swap(&orig[left], &orig[right]);
   }    
return left;
}
void BuildHeap(int orig[], int size){    int k;    for (k=size/2-1; k>=0; k–)
   {
       HeapAdjust(orig, k, size);
   }
   

}void HeapAdjust(int orig[], int adjustPort, int size) {    
   
int min;   //记录左右节点中最小的
   
int nextPoint; // 下一步
   
while (adjustPort*2+1<size-1) // 还有孩子
   {  
       
int leftChild = adjustPort * 2+1;        int rightChild = adjustPort * 2 + 2;
       min = orig[leftChild];
       nextPoint = leftChild;        
if (rightChild<=size-1&&orig[rightChild]<orig[leftChild])
       {
           min = orig[rightChild];
           nextPoint = rightChild;
       }        
if (orig[adjustPort]>min)
       {
           orig[nextPoint] = orig[adjustPort];
           orig[adjustPort] = min;
           adjustPort = nextPoint;
       }        
else
       {            
break;
       }
   }
}
void insertSortForward(int orig[], int size){    int i, j;    for (i = 1; i < size; i++) {        int temp = orig[i];        int index = i;
       j = i –
1;        while (j >= 0 && orig[j] > temp)
       {
           orig[index] = orig[j];
           index = j;
           j–;
       }
       orig[j +
1] = temp;
   }    
for (int i = 0; i < size; i++)        printf(%d, orig[i]);    printf(\n);
}
void insertSortBackward(int orig[], int size) // 从后往前{    int i, j;    int left, right;    for (i = 1; i < size; i++) {        for (j = 0; j < i; j++) {            if (orig[i] <= orig[j])
           {
               left = orig[i];
               right = i;                
while (i – j)
               {
                   orig[i] = orig[i –
1];
                   i–;
               }
               i = right;
               orig[j] = left;
           }
       }
       
   }    
for (int i = 0; i < size; i++)        printf(%d, orig[i]);    printf(\n);
}
void bubbleSort(int orig[], int size) {    int i = 0;    int j = 0;    for (i = 0; i < size; i++) {        for (j = 0; j < size – i; j++) {            if (orig[j] > orig[j + 1]) {                int temp = 0;
               temp = orig[j];
               orig[j] = orig[j +
1];
               orig[j +
1] = temp;
           }
       }
   }    
for (int i = 0; i < size; i++)        printf(%d, orig[i]);    printf(\n);
}
void selectSort(int orig[], int size){    for (int i = 0; i < size; i++) {        int min = orig[i];        int index = i;        for (int j = i+1; j < size; j++)
       {            
if (min > orig[j]) {
               min = orig[j];
               index = j;
           }
       }
       orig[index] = orig[i];
       orig[i] = min;
   }    
for (int i = 0; i < size; i++)        printf(%d, orig[i]);    printf(\n);
}

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。