简单的排序算法实现
#include #includevoid 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= orig[left]) left++;
swap(&orig[left], &orig[right]); while (left=0; k--)
{
HeapAdjust(orig, k, size);
}
}void HeapAdjust(int orig[], int adjustPort, int size) {
int min; //记录左右节点中最小的
int nextPoint; // 下一步
while (adjustPort*2+1min)
{
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");
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
评论列表