-
数据结构中三种重要的入门级的线性表排序方法
普通类 -
- 支持
- 批判
- 提问
- 解释
- 补充
- 删除
-
-
数据结构中三种重要的入门级的线性表排序方法
C++ 代码 #include <windows.h>
#include <iostream>
using namespace std;
void QSort(int a[],int left,int right);
void BSort(int newarray[],int arraylen);
void Isort(int newarray[],int arraylen);
void SetColor(unsigned short ForeColor=4,unsigned short BackGroundColor=0)
{
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor);
}
void main()
{
SetColor(0,10);
//int array[]={8,7,7};//三位观测
int array[]={1,2,3,7,8,9,9,100,23,66};
int len=sizeof(array)/sizeof(int);
for(int i=0; i<len; i++) //原始顺序输出
cout<<array[i] <<",";
cout <<"->原始数据输出";
cout <<endl <<endl;
QSort(array,0,len-1);
for(int i=0; i<len; i++) //排序结果输出
cout <<array[i]<<",";
cout <<"->排序结果输出";
cout <<endl;
cin.get();
}
void BSort(int newarray[],int arraylen)
{
int temp;
for(int j=1;j<arraylen;j++)
{
for(int i=0;i<arraylen-j;i++)
{
if(newarray[i]>newarray[i+1])
{
temp=newarray[i];
newarray[i]=newarray[i+1];
newarray[i+1]=temp;
}
}
}
}
void ISort(int newarray[],int arraylen)
{
int loop,point;
for(int i=1;i<arraylen;i++)
{
point=newarray[i];
loop=i-1;
while(loop>=0 && point<newarray[loop])
{
newarray[loop+1]=newarray[loop];
newarray[loop]=point;
loop--;
}
}
}
void QSort(int a[],int left,int right)
{
int point=a[right],l=left,r=right,temp;
while(l<r)
{
//cout<<l<<"|"<<r<<endl;
while(a[l]<=point && l<r) l++;
while(a[r]>point && r>l)//这里r>l是因为第一次循环过后a[r]已经变成了8判断a[r]>7已经成立了会移动,利用r>l避免错位!
{
//cout<<a[r]<<"是当前的a[r]";//这里观察a[r]经过第一次循环后的变化!
r--;
}
temp=a[l];
a[l]=a[r];
a[r]=temp;
}
if(left<l) QSort(a,left,l-1);
if(right>r) QSort(a,r+1,right);
}
对于第三种方法也就是QSort比较难理解,但的确是最快的方式!
由于数组操作各种语言差不多,稍加修改后的涵数参数对于vb或者java同样是适用的! -
-
- 标签:
- 入门级
- qsort
- temp
- void
- 中三
- 重要
- loop
- newarray
- 三种
- 数据结构
- int
- point
-
加入的知识群:
学习元评论 (0条)
聪明如你,不妨在这 发表你的看法与心得 ~