当前位置:首页 » 课程大全 » 字符排序课程设计

字符排序课程设计

发布时间: 2021-02-21 02:20:06

㈠ c++程序代码,数据排序的课程设计,有详细注释!谢谢

#include<iostream>
#include<cstdlib>
using namespace std;
void select(int n);
void insert(int a[],int n);
void input1(int a[],int n);
void input2(int a[],int n);
void choose(int a[],int n);
void exchange(int a[],int n);
void merge(int a[],int left,int mid,int right);
void output(int a[],int n);
int main()
{
cout<<" 数据排序"<<endl;
cout<<" =============="<<endl;
cout<<endl;
cout<<" 1. 插入排序"<<endl;
cout<<" 2. 选择排序"<<endl;
cout<<" 3. 交换排序"<<endl;
cout<<" 4. 归并排序"<<endl;
cout<<endl;
cout<<" 请选择(1~4,0:退出)"<<endl;
int select,n,way;
int *a;
cin>>select;
switch(select)
{
case 1:cout<<"插入排序"<<endl;
cout<<"请确定输入数据个数:";
cin>>n;
a=new int [n];
cout<<"请选择输入方式:"<<"1为手工输入,2为随机生成"<<endl;
cin>>way;
switch(way){
default : cout<<"输入错误!"<<endl;
case 1:input1(a,n);
insert(a,n);
output(a,n);
delete []a;
break;
case 2:input2(a,n);
insert(a,n);
output(a,n);
delete []a;
break;
}
break;
case 2:cout<<"选择排序"<<endl;
cout<<"请确定输入数据个数:";
cin>>n;
a=new int [n];
cout<<"请选择输入方式:"<<"1为手工输入,2为随机生成"<<endl;
cin>>way;
switch(way)
{
default : cout<<"输入错误!"<<endl;
case 1:input1(a,n);
choose(a,n);
output(a,n);
delete []a;
break;
case 2:input2(a,n);
choose(a,n);
output(a,n);
delete []a;
break;
}
break;
case 3:cout<<"交换排序"<<endl;
cout<<"请确定输入数据个数:";
cin>>n;
a=new int [n];
cout<<"请选择输入方式:"<<"1为手工输入,2为随机生成"<<endl;
cin>>way;
switch(way)
{
default : cout<<"输入错误!"<<endl;
case 1:input1(a,n);
exchange(a,n);
output(a,n);
delete []a;
break;
case 2:input2(a,n);
exchange(a,n);
output(a,n);
delete []a;
break;
}
break;
case 4:cout<<"归并排序"<<endl;
cout<<"请确定输入数据个数:";
cin>>n;
a=new int [n];
cout<<"请选择输入方式:"<<"1为手工输入,2为随机生成"<<endl;
cin>>way;
switch(way)
{
default :cout<<"输入错误!"<<endl;
case 1:input1(a,n);
merge(a,0,n/2,n);
output(a,n);
delete []a;
break;
case 2:input2(a,n);
merge(a,0,n/2,n);
output(a,n);
delete []a;
break;
}
break;
case 0:
break;
}return 0;
}
void input1(int a[],int n){
for(int i=0;i<n;i++)
cin>>a[i];
}
void input2(int a[],int n){
for(int i=0;i<n;i++)
a[i]=rand()%100;
for(int j=0;j<n;j++)
cout<<a[j]<<" ";
cout<<endl;
}
void output(int a[],int n){
for(int i=0;i<n;i++){
int k=0;
k++;
cout<<a[i]<<" ";
if(k%10==0)
cout<<endl;
}
}
void insert(int a[],int n){
int k;
for(int i=0;i<n-1;i++)
{
k=a[i+1];
int j=i;
while(j>=0&&k<a[j]) //若相邻2数据顺序不对
{
a[j+1]=a[j];;
j--;
}
a[j+1]=k; //到这里实现将每个i取值时顺序不对的数据调换位置
}
}
void choose(int a[],int n){
int t,k;
for(int i=0;i<n-1;i++){
int j=i;
for(k=i+1;k<n;k++)
if(a[k]<a[j]) //顺序不对,将较小的数据下标传递给j
j=k;
if(j!=i)
{
int t=a[i]; //将这2数据顺序交换,实现正序排列
a[i]=a[j];
a[j]=t;
}
}
}
void exchange(int a[],int n){
int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]>a[j]){
int t=a[i];
a[i]=a[j];
a[j]=t;
}

}void merge(int a[],int left,int mid,int right)
{
int *b=new int [right-left+1];
int i=left,j=mid+1,k=0;
while((i<=mid)&&(j<=right))
if(a[i]<=a[j]) b[k++]=a[i++];
else b[k++]=a[j++];
while (i<=mid) b[k++]=a[i++];
while(j<=right) b[k++]=a[j++];
for(i=0,k=left;k<=right;) a[k++]=b[i++];
}

㈡ 课程设计,排序的综合实现(直接插入,简单选择,快排,堆排,归并)

(一)确定论文提要,再加进材料,形成全文的概要
论文提要是内容提纲的雏型。一般书、教学参考书都有反映全书内容的提要,以便读者一翻提要就知道书的大概内容。我们写论文也需要先写出论文提要。在执笔前把论文的题目和大标题、小标题列出来,再把选用的材料插进去,就形成了论文内容的提要。
(二)原稿纸页数的分配
写好毕业论文的提要之后,要根据论文的内容考虑篇幅的长短,文章的各个部分,大体上要写多少字。如计划写20页原稿纸(每页300字)的论文,考虑序论用1页,本论用17页,结论用1—2页。本论部分再进行分配,如本论共有四项,可以第一项3—4页,第二项用4—5页,第三项3—4页,第四项6—7页。有这样的分配,便于资料的配备和安排,写作能更有计划。毕业论文的长短一般规定为5000—6000字,因为过短,问题很难讲透,而作为毕业论文也不宜过长,这是一般大专、本科学生的理论基础、实践经验所决定的。
(三)编写提纲
论文提纲可分为简单提纲和详细提纲两种。简单提纲是高度概括的,只提示论文的要点,如何展开则不涉及。这种提纲虽然简单,但由于它是经过深思熟虑构成的,写作时能顺利进行。没有这种准备,边想边写很难顺利地写下去。
编写要点
编写毕业论文提纲有两种方法:
一、标题式写法。即用简要的文字写成标题,把这部分的内容概括出来。这种写法简明扼要,一目了然,但只有作者自己明白。毕业论文提纲一般不能采用这种方法编写。
二、句子式写法。即以一个能表达完整意思的句子形式把该部分内容概括出来。这种写法具体而明确,别人看了也能明了,但费时费力。毕业论文的提纲编写要交与指导教师阅读,所以,要求采用这种编写方法。
详细提纲举例
详细提纲,是把论文的主要论点和展开部分较为详细地列出来。如果在写作之前准备了详细提纲,那么,执笔时就能更顺利。下面仍以《关于培育和完善建筑劳动力市场的思考》为例,介绍详细提纲的写法:
上面所说的简单提纲和详细提纲都是论文的骨架和要点,选择哪一种,要根据作者的需要。如果考虑周到,调查详细,用简单提纲问题不是很大;但如果考虑粗疏,调查不周,则必须用详细提纲,否则,很难写出合格的毕业论文。总之,在动手撰写毕业论文之前拟好提纲,写起来就会方便得多。

㈢ 求数据结构课程设计报告,多关键字排序,急急急~~~

呵呵,我也很想知道k!

㈣ c语言 数据结构 排序综合 课程设计

给你发了 不只3种 给你5种了 363173922的 记得给我加分 有问题加我再给你解决 没分就免谈 好了都给你搞定了

㈤ 选择排序程序设计(输入10个有符号十进制整数,排序后输出) 求程序或课程设计

java的简单排序,不知道你说的是哪一种语言,不过各种语言都是相通的大同版小异
package task1.Array;
import java.util.Arrays;
class ArraySort {
public void arraySort(int[] b) {
权for (int a : b) {
Arrays.sort(b);
System.out.print(a + " ");
}
}
public static void main(String[] args) {
ArraySort as = new ArraySort();
int[] b = { 1, 2, 45, 5, 68, 9, 78, 4, 52, 34, 5 };
as.arraySort(b);
}
}

㈥ 求一份多关键字排序程序课程设计

FEIYGJB;L M,D/.SDFJBLLN

㈦ 排序算法课程设计

// 各种排序算法汇总.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

#include <stack>
#include <time.h>
#include <stdlib.h>

template < typename T >
class SqList
{
private:
int length;
T * r;
public://接口
SqList(int n = 0);//构造长度为n的数组
~SqList()
{
length = 0;
delete r;
r = NULL;
}
void InsertSort();//顺序插入排序
void DisPlay();//输出元素
void BInsertSort();//折半插入排序
void ShellSort(int dlta[],int t);//希尔排序
void QuickSort();//快速排序
void SelectSort();//简单选择排序
void BubbleSort();//改进冒泡排序
void Bubble_Sort2();//相邻两趟是反方向起泡的冒泡排序算法
void Bubble_Sort3();//对相邻两趟反方向算法进行化简,循环体中只包含一次冒泡
void HeapSort();//堆排序
void Build_Heap_Sort();//堆排序由小到大序号建立大根堆
void MergeSort();//归并排序
void OE_Sort();//奇偶交换排序的算法

void Q_Sort_NotRecurre();//非递归快速排序
void HeapSort_3();//三叉堆排序

public://调用
void ShellInsert(int dk);//一趟希尔排序
void QSort(int low,int high);//快速排序
int Partition(int low,int high);//一趟快速排序
int SelectMinKey(int i);//从i到length中选择最小值下标
void HeapAdjust(int s,int m);//调整s的位置,其中s+1~m有序
void HeapAdjust_3(int s,int m);//三叉堆****调整s的位置,其中s+1~m有序
void Merge(T SR[],T TR[],int i,int m,int n);//归并
void MSort(T SR[],T TR1[],int s,int t);//归并
void Easy_Sort(int low,int high);//3个数直接排序
void Build_Heap(int len);//从低下标到高下标逐个插入建堆的算法***建立大根堆**但为排序

};
template < typename T >
SqList<T>::SqList(int n = 0)
{
//srand( time(0) );
length = n;
r=new T[length+1];
T t;
cout<<"随机生成"<<n<<"个值:"<<endl;
for (int i=1;i<=length;i++)
{
//cin>>t;
r[i] = rand()%1000;
//r[i] = t;
}
for (int i=1; i<=length;i++)
cout<<r[i]<<",";
cout<<endl;
}
template < typename T >
void SqList<T>::InsertSort()
{
int i,j;
for (i=2;i<=length;i++)
{
if (r[i]<r[i-1])
{
r[0]=r[i];
r[i]=r[i-1];
for (j=i-2;r[0]<r[i-2];j--)
r[j+1]=r[j];
r[j+1]=r[0];
}
}
}
template < typename T >
void SqList<T>::DisPlay()
{
int i;
cout<<length<<" 元素为:"<<endl;
for (i = 1;i < length+1;i++ )
{
cout<<r[i]<<" ,";
}
cout<<endl;
}
template < typename T >
void SqList<T>::BInsertSort()
{
int i, j, m;
int low,high;
for (i = 2;i<= length;i++)
{
r[0]=r[i];
low=1;
high=i-1;
while (low<=high)
{
m = (low+high)/2;
if ( r[0] < r[m] )
high=m-1;
else
low=m+1;
}
for ( j=i-1;j >=high+1; j--)
{
r[j+1] = r[j];
}
r[high+1] = r[0];
}
}

template < typename T >
void SqList<T>::ShellInsert(int dk)
{
int i,j;
for (i=dk+1;i<=length;i++)
if (r[i] < r[i-dk])
{
r[0] = r[i];
for ( j=i-dk; j>0 && r[0] < r[j]; j-=dk)
{
r[j+dk]=r[j];
}
r[j+dk] = r[0];
}
}
template < typename T >
void SqList<T>::ShellSort(int dlta[],int t)
{
int k=0;
for (;k<t;k++)
{
ShellInsert(dlta[k]);
}
}
template < typename T >
int SqList<T>::Partition(int low,int high)
{
int pivotkey;
r[0] = r[low];//记录枢轴值
pivotkey = r[low];
while (low < high)
{
while (low < high&& r[high] >= pivotkey)
high--;
r[low] = r[high];
while (low < high&& r[low] <= pivotkey)
low++;
r[high] = r[low];
}
r[low] = r[0];//枢轴记录到位
return low;//返回枢轴位置
}
template < typename T >
void SqList<T>::QSort(int low,int high)
{
int pivotloc;
if (low < high)
{
pivotloc = Partition(low,high);
QSort(low,pivotloc-1);
QSort(pivotloc+1,high);
}
}
template < typename T >
void SqList<T>::QuickSort()
{
QSort(1,length);
}
template < typename T >
int SqList<T>::SelectMinKey(int i)
{
int j,min=i;
for (j=i;j <= length;j++)
{
if (r[min] > r[j])
{
min = j;
}
}
return min;
}
template < typename T >
void SqList<T>::SelectSort()
{
int i,j;
T t;
for (i=1;i < length;i++)//循环length-1次不是length次
{
j=SelectMinKey(i);
if (i != j)
{
t= r[j];
r[j]=r[i];
r[i]=t;
}
}
}
template < typename T >
void SqList<T>::BubbleSort()
{
int i,j;
int flag=1;//标识位,如果出现0,则没有交换,立即停止
T t;
for (i=1;i < length && flag;i++)
{
flag = 0;
for (j=length-1;j>=i;j--)
if (r[j]>r[j+1])
{
t=r[j];
r[j]=r[j+1];
r[j+1]=t;
flag=1;
}
}
}
template < typename T >
void SqList<T>::Bubble_Sort2()
{
bool change = true;
int low = 1, high = length;
int i;
T t;
while ( (low < high) && change )
{
change = false;
for ( i = low; i < high; i++ )
{
if ( r[i] > r[i+1] )
{
t = r[i];
r[i] = r[i+1];
r[i+1] = t;
change = true;
}
}
high-=1;
for ( i = high; i > low; i-- )
{
if ( r[i] < r[i-1] )
{
t = r[i];
r[i] = r[i-1];
r[i-1] = t;
change = true;
}
}
low+=1;
}
}

template < typename T >
void SqList<T>::Bubble_Sort3()
{
int i,d=1;
bool change = true;
int b[3] = {1,0,length};//b[0]为冒泡的下界,b[ 2 ]为上界,b[1]无用
T t;
while (change)//如果一趟无交换,则停止
{
change = false;
for ( i=b[1-d]; i!=b[1+d]; i=i+d )//统一的冒泡算法
{
if ( (r[i]-r[i+d])*d > 0 )///注意这个交换条件
{
t = r[i];
r[i] = r[i+d];
r[i+d] = t;
change = true;
}
}
d = d*(-1);//换个方向
}
}
template < typename T >
void SqList<T>::HeapAdjust(int s,int m)
{
/* 已知H.r[s..m]中记录的关键字除H.r[s].key之外均满足堆的定义,本函数 */
/* 调整H.r[s]的关键字,使H.r[s..m]成为一个大顶堆(对其中记录的关键字而言) */
int j;
T rc = r[s];
for (j=2*s;j <= m;j*=2)
{
/* 沿key较大的孩子结点向下筛选 */
if (j < m && r[j] < r[j+1])
j++;/* j为key较大的记录的下标 */
if (rc >= r[j])
break;/* rc应插入在位置s上 ,无需移动*/
r[s]=r[j];
s=j;
}
r[s]=rc;/* 插入 */
}
template < typename T >
void SqList<T>::HeapSort()
{
/* 对顺序表H进行堆排序。算法10.11 */
T t;
int i;
for (i=length/2;i>0;i--)/* 把H.r[1..H.length]建成大顶堆 */
HeapAdjust(i,length);
for (i=length;i>1;i--)
{
/* 将堆顶记录和当前未经排序子序列H.r[1..i]中最后一个记录相互交换 */
t=r[1];
r[1]=r[i];
r[i]=t;
HeapAdjust(1,i-1);/* 将H.r[1..i-1]重新调整为大顶堆 */
}
}
template < typename T >
void SqList<T>::Build_Heap_Sort()
{
int i;
Build_Heap(length);
for ( i = length; i > 1; i-- )
{
T t;
t = r[i];
r[i] = r[1];
r[1] = t;
Build_Heap(i-1);
}

}
template < typename T >
void SqList<T>::Build_Heap(int len)
{
T t;
for (int i=2; i <= len; i++ )
{
int j = i;
while ( j != 1 )
{
int k = j/2;
if ( r[j] > r[k] )
{
t = r[j];
r[j] = r[k];
r[k] = t;
}
j = k;
}
}

}
template < typename T >
void SqList<T>::Merge(T SR[],T TR[],int i,int m,int n)
{
/* 将有序的SR[i..m]和SR[m+1..n]归并为有序的TR[i..n] 算法10.12 */
int j,k,x;
for (j=m+1,k=i;j<=n&&i<=m;k++)/* 将SR中记录由小到大地并入TR */
{
if (SR[i]<SR[j])
TR[k]=SR[i++];
else
TR[k]=SR[j++];
}
if (i<=m)
for (x=0;x<=m-i;x++)
TR[k+x]=SR[i+x];/* 将剩余的SR[i..m]复制到TR */
if (j<=n)
for (x=0;x<=n-j;x++)
TR[k+x]=SR[j+x];/* 将剩余的SR[j..n]复制到TR */
}
template < typename T >
void SqList<T>::MSort(T SR[],T TR1[],int s,int t)
{
/* 将SR[s..t]归并排序为TR1[s..t]。算法10.13 */
int m;
T *TR2=new T[length+1];
if (s==t)
TR1[s]=SR[s];
else
{
m=(s+t)/2;/* 将SR[s..t]平分为SR[s..m]和SR[m+1..t] */
MSort(SR,TR2,s,m);/* 递归地将SR[s..m]归并为有序的TR2[s..m] */
MSort(SR,TR2,m+1,t);/* 递归地将SR[m+1..t]归并为有序的TR2[m+1..t] */
Merge(TR2,TR1,s,m,t);/* 将TR2[s..m]和TR2[m+1..t]归并到TR1[s..t] */
}
}
template < typename T >
void SqList<T>::MergeSort()
{
MSort(r,r,1,length);
}
template < typename T >
void SqList<T>::OE_Sort()
{
int i;
T t;
bool change = true;
while ( change )
{
change = false;
for ( i=1;i<length;i+=2 )
{
if (r[i] > r[i+1])
{
t = r[i];
r[i] = r[i+1];
r[i+1] = t;
change = true;
}
}
for ( i=2;i<length;i+=2 )
{
if ( r[i] > r[i+1] )
{
t = r[i];
r[i] = r[i+1];
r[i+1] = t;
change = true;
}
}

}

}
typedef struct
{
int low;
int high;
}boundary;
template <typename T >
void SqList<T>::Q_Sort_NotRecurre()
{
int low=1,high=length;
int piv;
boundary bo1,bo2;
stack<boundary> st;
while (low < high)
{
piv = Partition(low,high);
if ( (piv-low < high-piv) && (high-piv > 2) )
{
bo1.low = piv+1;
bo1.high = high;
st.push(bo1);
high = piv-1;
}
else if ( (piv-low > high-piv) && (piv-low >2) )
{
bo1.low = low;
bo1.high = piv-1;
st.push(bo1);
low = piv+1;
}
else
{
Easy_Sort(low,high);
high = low;
}
}
while ( !st.empty() )
{
bo2 = st.top();
st.pop();
low = bo2.low;
high = bo2.high;
piv = Partition(low, high);
if ( (piv-low < high-piv) && (high-piv > 2) )
{
bo1.low = piv+1;
bo1.high = high;
st.push(bo1);
high = piv-1;
}
else if ( (piv-low > high-piv) && (piv-low >2) )
{
bo1.low = low;
bo1.high = piv-1;
st.push(bo1);
low = piv+1;
}
else
{
Easy_Sort(low,high);
}
}

}
template < typename T >
void SqList<T>::Easy_Sort(int low,int high)
{
T t;
if ( (high-low) == 1 )
{
if ( r[low] > r[high] )
{
t = r[low];
r[low] = r[high];
r[high] = t;
}
}
else
{
if ( r[low] > r[low+1] )
{
t = r[low];
r[low] = r[low+1];
r[low+1] = t;
}
if ( r[low+1] > r[high] )
{
t = r[low+1];
r[low+1] = r[high];
r[high] = t;
}
if ( r[low] > r[low+1] )
{
t = r[low];
r[low] = r[low+1];
r[low+1] = t;
}
}

}

template < typename T >
void SqList<T>::HeapAdjust_3(int s,int m)
{
T rc = r[s];
for (int j = 3*s-1; j <= m;j=j*3-1)
{
if (j+1<m)//有3个孩子结点
{
if ( rc>=r[j] && rc>=r[j+1] && rc>=r[j+2] )
break;
else
{
if ( r[j] > r[j+1] )
{
if ( r[j] > r[j+2] )
{
r[s]=r[j];
s=j;
}
else//r[j]<=r[j+2]
{
r[s]=r[j+2];
s=j+2;
}
}
else//r[j]<=r[j+1]
{
if ( r[j+1] > r[j+2] )
{
r[s]=r[j+1];
s=j+1;
}
else//r[j+1]<=r[j+2]
{
r[s]=r[j+2];
s=j+2;
}
}
}
}
if ( j+1==m )//有2个孩子结点
{
if ( rc>=r[j] && rc>=r[j+1] )
break;
else
{
if ( r[j] > r[j+1] )
{
r[s]=r[j];
s=j;
}
else//r[j]<=r[j+1]
{
r[s]=r[j+1];
s=j+1;
}
}
}
if (j==m)//有1个孩子结点
{
if ( rc>=r[j] )
break;
else
{
r[s]=r[j];
s=j;
}
}
}
r[s]=rc;
}

template <typename T >
void SqList<T>::HeapSort_3()
{
int i;
T t;
for (i=length/3; i>0; i--)
HeapAdjust_3(i,length);
for ( i=length; i > 1; i-- )
{
t = r[i];
r[i] = r[1];
r[1] = t;
HeapAdjust_3(1,i-1);
}
}

int _tmain(int argc, _TCHAR* argv[])
{
SqList<int> Sq(15);
//Sq.InsertSort();
//Sq.BInsertSort();
/* 希尔排序*/
// int a[5]={5,4,3,2,1};
// Sq.ShellSort(a,5);

/* Sq.QuickSort();*/

// Sq.SelectSort();

/* Sq.BubbleSort();*/

/* Sq.HeapSort();*/

/* Sq.MergeSort();*/

/* Sq.Q_Sort_NotRecurre();*/

/* Sq.Bubble_Sort2();*/
/* Sq.OE_Sort();*/
/* Sq.Bubble_Sort3();*/

/* Sq.Build_Heap_Sort();*/

Sq.HeapSort_3();

Sq.DisPlay();
system("pause");
return 1;
}

㈧ c语言题目:用指向指针的方法对n个字符串排序并输出

#include<stdio.h>

#include<string.h>

int main()

{ int n,i,j;

char s[100][20],*p[100],*t;

scanf("%d",&n);

for(i=0;i<n;i++)

{scanf("%s",s[i]);

p[i]=s[i];

}

for(i=0;i<n-1;i++)

for(j=0;j<n-1-i;j++)

if(strcmp(p[j],p[j+1])>0)

{t=p[j];

p[j]=p[j+1];

p[j+1]=t;

}

puts("============");

for(i=0;i<n;i++)

puts(p[i]);

return 0;

}

热点内容
武汉大学学生会辅导员寄语 发布:2021-03-16 21:44:16 浏览:612
七年级学生作文辅导学案 发布:2021-03-16 21:42:09 浏览:1
不屑弟高考成绩 发布:2021-03-16 21:40:59 浏览:754
大学毕业证会有成绩单 发布:2021-03-16 21:40:07 浏览:756
2017信阳学院辅导员招聘名单 发布:2021-03-16 21:40:02 浏览:800
查询重庆2018中考成绩查询 发布:2021-03-16 21:39:58 浏览:21
结业考试成绩怎么查询 发布:2021-03-16 21:28:40 浏览:679
14中医医师资格笔试考试成绩查分 发布:2021-03-16 21:28:39 浏览:655
名著赏析课程标准 发布:2021-03-16 21:27:57 浏览:881
北京大学商业领袖高端培训课程 发布:2021-03-16 21:27:41 浏览:919