简单的排序算法复习
1,简单插入排序
void InsertSort(int a[],int n){
int i,j,temp;
for(i=1;i<n;i++){
temp = a[i];
for(j=i-1;j>=0&&a[j]>temp;j--){
a[j+1] = a[j];
}
a[j+1] = temp;
}
}
2,选择排序
void SelectSort(int a[],int n){
int i,j,min;
for(i=0;i<n;i++){
min = i;
for(j=i;j<n-1;j++){
if(a[j+1]<a[min]){
min = j+1;
}
}
int temp = a[i];
a[i] = a[min];
a[min] = temp;
}
}
3,快速排序
int Partition(int a[],int low,int high){
int temp = a[low];
while(high>low){
while(a[high]>=temp&&high>low)
high--;
a[low] = a[high];
while(a[low]<=temp&&high>low)
low++;
a[high] = a[low];
}
a[low] = temp;
return low;
}
void QuickSort(int a[],int low,int high){
if(high>low){
int t = Partition(a,low,high);
QuickSort(a,low,t-1);
QuickSort(a,t+1,high);
}
}
4,总的代码
#include<stdio.h>
int Partition(int a[],int low,int high){
int temp = a[low];
while(high>low){
while(a[high]>=temp&&high>low)
high--;
a[low] = a[high];
while(a[low]<=temp&&high>low)
low++;
a[high] = a[low];
}
a[low] = temp;
return low;
}
void QuickSort(int a[],int low,int high){
if(high>low){
int t = Partition(a,low,high);
QuickSort(a,low,t-1);
QuickSort(a,t+1,high);
}
}
void InsertSort(int a[],int n){
int i,j,temp;
for(i=1;i<n;i++){
temp = a[i];
for(j=i-1;j>=0&&a[j]>temp;j--){
a[j+1] = a[j];
}
a[j+1] = temp;
}
}
void SelectSort(int a[],int n){
int i,j,min;
for(i=0;i<n;i++){
min = i;
for(j=i;j<n-1;j++){
if(a[j+1]<a[min]){
min = j+1;
}
}
int temp = a[i];
a[i] = a[min];
a[min] = temp;
}
}
int main(void)
{
int a[] = {12,45,33,1,14,4,35,3,9,10};
for(int i=0;i<10;i++){
printf("%d\n",a[i]);
}
printf("********\n");
// QuickSort(a,0,9);
// InsertSort(a,10);
SelectSort(a,10);
for(int i=0;i<10;i++){
printf("%d\n",a[i]);
}
return 0;
}