各种排序方法比较
2014-04-12 15:17
274 查看
冒泡法
简单排序法
插入排序算法
快速排序算法
-----------------------------------------
二分法查找
int bfind(int* a,int len,int val)
{
int m = len/2;
int l = 0;
int r = len;
while(l!=m && r!= m)
{
if(a[m] > val)
{
r = m;
m = (m+l)/2;
}
else if(a[m] < val)
{
l = m;
m = (m+r)/
9aa4
2;
}
else
return m;
}
return -1; //没有找到
}
void sort(int *ar, int num) { int i, j; int t; int flag = 0; print(ar, num); for(i = 1; i < num; i++) //num个数需要排num - 1次 { flag = 0; for(j = 0; j < num - i; j++) //每次只需对前num - i个数排序 { if(ar[j] > ar[j+1]) //如果第j个数比它后面一个数大,就要交换 { t = ar[j]; ar[j] = ar[j+1]; ar[j+1] = t; flag = 1; } } if(flag == 0) //如果flag == 0表明本次排序没有经过一个交换,所以说明它己经有序了,就不用再循环 { break; } print(ar, num); } print(ar, num); }-----------------------------------------------------------
简单排序法
void sort(int *ar, int num) { int i, j, t, min; print(ar, num); for(i = 0; i < num - 1; i++) { min = i; //假设最小的一个数的下标就是i for(j = i + 1; j < num; j++) { if(ar[min] > ar[j]) { min = j; //用min保存最小的数的下标 } } if(min != i) //把最小的那个数放到i这个位置 { t = ar[min]; ar[min] = ar[i]; ar[i] = t; } } print(ar, num); }---------------------------------------------
插入排序算法
void sort(int *ar, int num) { int i, j, t; print(ar, num); for(i = 1; i < num; i++) //取出第i个数,用来和它前面的i - 1个数进行比较 { for(j = i - 1; j >= 0; j--) { if(ar[i] >= ar[j]) break; } if(j != i - 1) { t = ar[i]; memmove(&ar[j+2], &ar[j+1], (i - j - 1) * sizeof(int)); //把j之后的(i - j - 1)个数据通通向后移动一个位置 ar[j+1] = t; } print(ar, num); } print(ar, num); }--------------------------------------------
快速排序算法
void sort(int *ar, int left, int right) { int l = left, r = right; int t; if(r > l) { t = ar[l]; //从数组左边取一个数 while(r > l) { while(r > l) { if(ar[r] <= t) //从右边找一个比t小的数 { ar[l] = ar[r]; //把找到的数放到ar[l]中 l++; break; } r--; } while(r > l) { if(ar[l] > t) //从右边找一个比t大的数 { ar[r] = ar[l]; //把找到的数放到ar[r]中 r--; break; } l++; } } ar[l] = t; //把之前的t主回到最后空出来的那个位置 sort(ar, left, l - 1); //把序列的左半部份重复之前的排序 sort(ar, l + 1, right); //把序列的右半部份重复之前的排序 } }
-----------------------------------------
二分法查找
int bfind(int* a,int len,int val)
{
int m = len/2;
int l = 0;
int r = len;
while(l!=m && r!= m)
{
if(a[m] > val)
{
r = m;
m = (m+l)/2;
}
else if(a[m] < val)
{
l = m;
m = (m+r)/
9aa4
2;
}
else
return m;
}
return -1; //没有找到
}
相关文章推荐
- 各种排序方法比较
- 【数据结构之排序11】各种内部排序方法的比较和选择
- 常见排序算法:各种内部排序方法比较
- 各种内部排序方法的比较和选择
- 各种内部排序算法复杂度的比较和排序方法的选择
- 各种内部排序方法的分析比较
- 各种内部排序算法复杂度的比较和排序方法的选择
- 排序(各种排序方法的实现与比较)
- 各种内部排序算法时间复杂度比较和排序方法的选择
- 各种排序方法的综合比较
- 各种排序方法的性能比较
- 各种内部排序算法复杂度的比较和排序方法的选择
- 各种排序方法的综合比较
- 各种内部排序算法复杂度的比较和排序方法的选择
- 各种内部排序方法的比较
- 各种内部排序算法复杂度的比较和排序方法的选择
- 各种排序方法比较
- 各种内部排序方法的比较和选择
- 各种内部排序方法的比较和选择
- 各种内部排序方法的比较和选择 (转)